stm32定时器(标准库函数)

1.TIM定时器概念

定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

16位计数器,预分频器,自动重装寄存器的时基本单元可以实现最大的59.65s的定时

定时器不仅具备中断功能,而且还包含内外时钟源选择,输入捕获,输出比较,编码器口

定时器主要分为3大类,高级定时器(TIM1,TIM8) 通用定时器(TIM2~TIM5) 基本定时(TIM6,TIM7)

不同芯片所带的资源不同,因此具体所带资源应该查看所对应的芯片手册。

1.定时器三大类的不同作用

img

高级定时器:拥有通用定时器的全部功能,并额外拥有重复计数器,死区生成,互补输出,刹车输入等功能

img

通用定时器:拥有基本定时器的所有功能,并且额外具有内外时钟源选择,输入捕获,输出比较,编码器接口,主从触发模式等功能

img

基本定时器:定时中断,主模式触发DAC的功能

img

2.定时器中断

定时器中断:定时中断是在受到时钟源的影响下,实现CNT计数器的增长,在增长的同时与自动重装寄器(ARR)相比较,当计数器达到自动重装寄存器的值时,会使CNT计数器清0,并且发出一个中断信号,以实现定时器中断的目标。

img

1.定时器中断

在定时器中断时,我们通常需要打开定时器的内部时钟,并且为定时器选择时钟源(选择内部时钟源)。使其在内部模式的状态下工作,此时我们也需要初始化时基单元。将时基单元的参数配置成我们实现功能所需要的参数。然后就时配置配置中断实现功能了。

对于定时器时基单元的参数选择:

img

计数器溢出频率:也就是计数器计完一个过程的频率,换句话说也就是计数器达到ARR触发中断的频率,通过这样也就可以得到他的周期,也就是定时器定的时间。CK_PSC也就是定时器时钟源的时钟频率。

 //定时器初始化函数
 void TIM_Init()
 {
     // 1.第一步打开定时器的时钟,使用RCC_APB1PeriphClockCmd函数打开TIM2资源
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
     
     //2.第二步将时钟资源设为内部时钟源
     TIM_InternalClockConfig(TIM2);
     
     //3.第三步配置时基单元,设置一个结构体来对其赋值
     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
     
     
 //  TIM_CKD_DIV1:不分频,即输入时钟不分频。这意味着定时器的时钟频率等于输入时钟的频率。例如,如果输入时钟是72MHz,那么定时器的时钟频率也是72MHz。这样可以保持最高的定时器分辨率,但也意味着定时器的计数速度较快。
 ​
 //TIM_CKD_DIV2:除以2分频。定时器的时钟频率为输入时钟的一半。这可以减慢定时器的计数速度,使得定时器的周期变长。
 ​
 //TIM_CKD_DIV4:除以4分频。定时器的时钟频率为输入时钟的四分之一。这进一步减慢了定时器的计数速度,使得定时器的周期更长。
     TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1  ;
     TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up   ;
     TIM_TimeBaseInitStructure.TIM_Period=(10000-1);
     TIM_TimeBaseInitStructure.TIM_Prescaler=(7200-1);
     TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
     TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
     
     /*中断输出配置*/
     TIM_ClearFlag(TIM2, TIM_FLAG_Update);                       //清除定时器更新标志位
                                                                 //TIM_TimeBaseInit函数末尾,手动产生了更新事件
                                                                 //若不清除此标志位,则开启中断后,会立刻进入一次中断
                                                                 //如果不介意此问题,则不清除此标志位也可
     
     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);                  //开启TIM2的更新中断
     
     /*NVIC中断分组*/
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);             //配置NVIC为分组2
                                                               
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值