TIM定时器——定时中断

TIM定时器介绍

TIM(Timer)定时器,本质上是一个计数器,可以对输入的时钟进行计数,并在计数达到指定值时候触发中断。STM32的定时器包括16位计数器、预分频器、自动重装寄存器(统称为时基单元)。STM32的定时器不仅具备定时中断的功能,还能选择内外时钟源、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。STM32的定时器根据不同的应用环境分为高级定时器、通用定时器和基本定时器。

TIM定时器的类型

 库函数中还有TIM9、TIM10等,使用时注意自己芯片的型号上有没有相应的定时器

定时器的结构

基本定时器

基本定时器的时钟可以认为来自于内部时钟,一般都是72MHz。下面有三个重要的寄存器,预分频器、计数器和自动重装载寄存器,时钟经过分频之后,计时器计数,当计数值达到重装值之后会产生一个更新中断(UI)或更新事件(U),更新中断经过NVIC处理之后就会交给CPU处理, 更新事件不会让CPU处理,而是触发其他外设的操作。

当需要DAC(Digitaal to Analog Convertor)数模转换输出一段波形时,正常思路就是每隔一段时间中断一次手动触发DAC转换,但是那样会使主程序频繁处于中断中。这种情况就能用主模式,将更新事件映射到触发输出(Trigger Out)上,然后再接到DAC转换的引脚上。

预分频器的值为0时也就是不分频,为1时就是2分频,依次类推

通用定时器

通用定时器的结构图就复杂一点了,结构图的左上部分是时钟的选择,除了选择内部时钟外,还能选择外部时钟TIMx_ETR、TI1FP1、TI2FP2、以及定时器级联,当更新事件通过TRGO接到其他时钟作为其他定时器的时钟源就实现了定时器的级联。结构图下面部分是输入捕获和输出比较的部分,用于捕获波形和输出PWM波形。通用定时器的时基单元除了自增计数,还可以自减计数和中央对齐计数。

高级定时器

 

高级定时器在通用定时器的基础上增加了重复计数器,在输出比较的部分,每个通道输出了两个互补的波形,这个是为了驱动三项无刷电机而设计的,最下面的部分是刹车电路,内部故障时可以切断电路,保障安全(可以去了解一下发明三项无刷电机的人,挺牛b的)

时基单元

预分频器

预分频器时序图

 

 CK_PSC是预分频寄存器,CNT_EN是计数器使能,可以发现在计数开始后,改变了预分频寄存器的值,但还是按照原来的频率计数,直到计数值达到FC(这就是自动重装值)重新计数时才改变了计数频率。可以发现在预分频控制寄存器下面还有个预分频器缓冲器,正真起作用的时这个缓冲寄存器(也叫影子寄存器),当预分频器被重新写入时,产生了更新事件之后影子寄存器才发生改变。

可以得到,计数器计数频率公式:时钟频率/(预分频值+1)

计数器

在计数值到自动重装值之后,就会产生一个更新事件,这时候中断标志位会置1,需要手动清除,否则下次不会产生中断

计数器溢出频率:时钟频率/(预分频值+1)/(自动重装值+1)

计数器有无预装的情况

 

 

TIM定时器函数

 这里暂时先讲需要用到的函数,要了解其他的函数可以自行查看固件库手册。

 带有蓝色书签的就是定时中断需要用到的代码,可以自己在固件库手册查看。

代码实例

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值