新闻资讯

    简单例子理解TIMx

    4.1 使得PB5-TIM3通道2产生频率为12.5Hz的方波,该方波控制LED1的闪烁

    主函数为:

    1 int main(void)

    2 {

    ();//系统时钟设置及外设时钟使能

    (); //中断源配置

    ();//定时器3的初始化

    6 while(1);

    7 }

    配置各外设的时钟和系统时钟:

    1 /*************************

    2 * 名 称:void (void)

    3 * 功 能:系统时钟配置为72MHZ, 外设时钟配置

    4 *************************/

    5 void (void)

    6{

    7 ();

    8 md(, );

    9 md(| |

    | | , );

    }

    配置中断向量:(因为这里用到了TIM3,所以要配置其中断向量)

    1 /*****************

    2 * 名称:on(void)

    3 * 功能:中断源配置

    4*****************/

    5 void (void)

    6 {

    ;

    onfig();

    . = ; //配置定时器中断

    10 . = 0;

    . =0;

    12 . = ;

    13 (&);

    14 }

    TIM3的2通道配置:(下面首先配置GPIO PB5(为Tim3的2通道),PB5引脚默认是作为通用IO口使用,为了产生特定频率,利用了该引脚可以复用为,根据手册,需要用到局部复用映射,才能将映射到PB5。)

    在定时器3的初始化中,用到了输出比较2模式的翻转设置。也就是当=时,翻转输出的电平。以产生需要的频率,的值决定了翻转的频率。当=时,产生一次电平翻转,并在中断服务程序里重新完成对的装载。依次往复,产生了所需要的12.5Hz的频率。(注意注释的第15~17行介绍如何控制输出频率,=45000)

    1 void (void){

    ;

    Cmd(, );//定时器3时钟使能

    4

    . = ;//PB5复用为TIM3的通道2

    . = ;

    . = ;

    (GPIOB, &);

    9

    10/* TIM3局部复用功能开启在TIM3的局部复用开启时,PB5会被复用为*/

    11 (M3 , );

    12

    13 /* Time Base */

    14/*----------------

    =72MHz 预分频系数=63 经过分频 定时器时钟为1.

    16捕获/比较寄存器2 =

    17 2通道产生的更新频率是=1./=25Hz

    18

    19-----------------*/

    ture. = 63; //预分频器=63

    ture. = ;//计数器向上计数模式 [4]=0

    ture. =; //自动重装载寄存器

    ture. = 0x0; //时钟分频因子 [9:8]=00

    24

    (TIM3,&re); //写TIM3各寄存器参数

    26

    re. = ; //[14:12]=011 翻转 当=时,翻转的电平

    re. = le; //输入/捕获2输出允许 OC2信号输出到对应的输出引脚PB5

    re. =;//若CC1通道配置为输出:CCR2是装入当前捕获/比较2 寄存器的值(预装载值)。

    30//当前捕获/比较寄存器包含了与计数器比较的值,并且在OC端口上输出信号

    re. = ; //输出极性 低电平有效 [5]=1;

    32

    (TIM3, &);

    ig(TIM3, e); //[1]=0 禁止寄存器的预装载功能,可随时写入

    35//且新值马上起作用

    36

    37 (TIM3,); //启动定时器3 [0]=1;

    38 (TIM3,,); //[2]=1 允许捕获/比较2中断

    39 }

    TIM3的中断服务子程序(每次=产生一次中断,在中断子程序中取出上一次的加上作为新的,这样等加到和相等时又会触发一次中断)

    1 void (void)

    2 {

    3

    4 if ((TIM3, ) != RESET)//判断状态寄存器 [2] 是否发生了捕

    获/比较2 中断

    5{

    6 t(TIM3, ); //软件清除状态寄存器 [2]

    捕获/比较2 中断中断标志

    7

    8 = (TIM3); //获取的预装值

    (TIM3, + ); //和累加后装入 这是为了配合计数

    器值的递增。以在下一次作出比较。

    10

    11 }

    12 }

    4.2周期控制通用定时器3的2通道,实现1KHz的不同占空比波形,控制LED实现呼吸灯

    主函数为:(不同于上面固定的频率定时方法,这里在while里不断更改的值来改变占空比)

    1 int main(void)

    2 {

    3 char a=0;

    4 ;

    5 ();

    6 ();

    7 (72000);//配置时钟节拍为1ms一次

    8 while(1){

    9 Delay(1);//延时1ms

    10 . = ;//PWM模式2

    11 . = le;//输出禁止

    12 . = ;//确定占空比

    13 . = ;

    14 (TIM3, &);

    15

    16/*调整的值来改变占空比,逐步的控制LED1的亮度, 占空比大过一定值时,

    17亮度的变化就不明显了,所以最大设定到17000*/

    18 if(a==0) =+10;

    19 else =-10;

    20 if(>17000){ =17000; a=1;}

    21 else if( }

    23 }

    配置各外设的时钟和系统时钟:

    1 /******************

    2 * 名称:void (void)

    3 * 功能:系统时钟配置为72MHZ, 外设时钟配置

    4 ******************/

    5 void (void){

    6

    7 ();

    8 md(, );

    9 md( | |

    10| | , );

    11 }

    TIM3的2通道配置:(注意,这里没有用到中断向量和中断子程序!!!下面首先配置GPIO PB5(为Tim3的2通道),PB5引脚默认是作为通用IO口使用,为了产生特定频率,利用了该引脚可以复用为,根据手册,需要用到局部复用映射,才能将映射到PB5。)

    由于TIM3计数器的时钟频率是72MHz,希望各通道输出频率为1KHZ,根据3倍预分频后,时钟频率为24MHz,根据公式ftim3=/(+1),可得到TIM3预分频的值为24000, 根据公式根据公式 通道输出占空比=/(+1),可以得到的计数值,逐步改变这个值,可以控制占空比, 从而获得LED1 亮度明暗渐变的效果。(所以在main函数的while中不断重置值来控制不同占空比)

    1 /********

    2 *名称:void (void)

    3 * 功能:TIM3初始化

    4 ********/

    5 void (void){

    6 ;

    7 md(, );

    8

    9 . = ;//PB5复用为TIM3的通道2

    10 . = ;

    11 . = ;

    12 (GPIOB, &);

    13 /*TIM3局部复用功能开启在TIM3的局部复用开启时,PB5会被复用为*/

    14 (M3 , );

    15

    16/*------------------------------

    17 =72MHz预分频系数=2 经过分频定时器时钟为24MHz

    18 根据公式 通道输出占空比=/(+1),可以得到的计数值

    19 捕获/比较寄存器2 =

    20 ------------------------------*/

    21 re. = 2;//预分频器=3

    22 re. = ;//计数器向上计数模式 [4]=0

    23 re. =24000;//自动重装载寄存器 确定频率为1KHz

    24 re. = 0x0;//时钟分频因子 [9:8]=00

    25 re.r = 0x0;

    26

    27 (TIM3,&re);//写TIM3各寄存器参数

    28

    29 . = ;//PWM模式2 [14:12]=111 在向上计数时单片机定时器里写程序

    30//一旦 . = le;//输入/捕获2输出允许OC2信号输出到对应的输出引脚PB5

    32 . = ;//确定占空比,这个值决定了有效电平的时间。

    33 . = ;//输出极性低电平有效 [5]=1;

    34

    35 (TIM3, &);

    36 (TIM3, );

    37 (TIM3,);//启动定时器3 [0]=1;

    38 }

    我们官方的QQ群1:

    我们官方的QQ群2:

    特别感谢网友的大力支持。

    我们的开源团队不断扩大单片机定时器里写程序,希望大家快来一起加入我们吧。

    在这里还是要谢谢大家的大力支持!

    大家快来关注吧!

网站首页   |    关于我们   |    公司新闻   |    产品方案   |    用户案例   |    售后服务   |    合作伙伴   |    人才招聘   |   

地址:北京市海淀区    电话:010-     邮箱:@126.com

备案号:冀ICP备2024067069号-3 北京科技有限公司版权所有