【STM32】TIM定时器

第一部分:定时器基本定时的功能;

第二部分:定时器的输出比较功能;

第三部分:定时器输入捕获的功能;

第四部分:定时器的编码接口。

1 TIM简介

  1. TIM(Timer)定时器;
  2. 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断(定时触发中断);
  3. 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时(72M/65536/65536,再取倒数);
  4. 不仅具备基本的定时中断功能,而且还包含内外时钟源选择输入捕获输出比较编码器接口主从触发模式等多种功能;
  5. 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。

1.1 定时器类型

|-----------|-------------------------|----------|--------------------------------------------------------|
| 类型 | 编号 | 总线 | 功能 |
| 高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
| 通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
| 基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |

STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

1.1.1 基本定时器

基本定时器框图: 拥有定时中断、主模式触发DAC的功能

下面三部分预分频器计数器自动重装载寄存器构成最基本的计数计时电路,因此叫时基单元。

预分频器之前连接的是基准计数时钟的输入,可以认为连接到了输入端,也就是CK_INT(72MHz)

预分频器 对72MHz的计数时钟进行分频,预分频器写0就是不分频,写1就是二分频36MHz......,所以预分频器的值和实际的分频系数相差1,即实际分频系数=预分频器的值 + 1。这个预分频器是16位的,所以最大值是65535,也就是65536分频。

然后是计数器,计数器可以对预分频器后的计数时钟进行计数,计数时钟每来一个上升沿,计数器就加1,这个计数器也是16位的,所以里面的值可以从0一直加到65535,再加的话,计数器就会从0开始。所以计数器的值在计时过程中会不断的自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务,所以还需要一个存储目标值的寄存器,那就是自动重装载寄存器。

自动重装载寄存器也是16位的,它存储的就是我们写入的计数目标,在运行过程中,计数器值不断自增,自动重装载寄存器的值是固定的,当计数值等于自动重装值时,也就是计时时间到了,此时会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。

UI那里向上的折线,代表这里会产生中断信号,像这种计数值等于重装值产生的中断,称为"更新中断",这个更新中断会通往NVIC,再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。

U向下的折线,代表这里会产生一个事件,这里对应的事件称为"更新事件",更新事件不会触发中断,但是可以触发内部其它电路的工作。

总结:从基准时钟,到预分频器,再到计数器,计数器自增,同时不断与自动重装寄存器进行比较,它俩值相等时,即计时时间到,这时会产生一个更新中断和更新事件,CPU响应更新中断,就完成定时中断的任务了。

主模式触发DAC(数字/模拟转换模块)功能:它能让内部的硬件在不受程序的控制下实现自动运行。

用途:在使用DAC的时候,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。如果用正常的思路实现,就是先设置一个定时器产生中断,每隔一段时间在中断函数中调用代码手动触发一次DAC转换,然后DAC输出,这样也是没问题的,但是会使主程序处于频繁被中断的状态,会影响主程序的运行和其它中断的响应,所以定时器设置了一个主模式,使用这个主模式可以把定时器的更新事件映射到触发输出(Trigger Out, TRFO)的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接去触发DAC了,整个过程不需要软件的参与,实现了硬件的自动化,这就是主模式的作用。

1.1.2 通用定时器

复杂很多,中间部分还是时基单元

通用计数器那种模式是向上计数,即自增;通用定时器和高级定时器还支持向下计数模式(向下自减,减到0,再回到重装值申请中断)和中央对齐模式(先向上自增到重装值,申请中断,再向下自减,减到0,申请中断)

这部分是内外时钟源选择和主从触发模式的结构了。对于基本定时器而言,定时只能选择内部时钟,也就是系统频率72MHz;到了通用定时器这里,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟。第一个外部时钟来自TIMx_ETR引脚上的外部时钟,这个ETR(External)引脚的位置,参考引脚定义表。

TIM2_CH1_ETR的意思是TIM2的CH1和ETR都是复用在这个位置,即PA0引脚。

这里就可以在TIM2的ETR引脚,也就是PA0上接一个外部方波时钟,然后配置一下内部的极性选择、边沿检测和预分频器电路,再配置一下输入滤波电路(对输入波形进行滤波),滤波后的信号,兵分两路,上面一路ETRF进入触发控制器,紧跟着就可以选择作为时基单元的时钟了,这一路电路称为"外部时钟模式2"。

除了外部ETR引脚可以提供时钟外,下面还有一路可以提供时钟,就是TRGI(Trigger In),它主要的作用是用作触发输入来使用的,这个触发输入可以触发定时器的从模式。暂时可以把TRGI看作外部时钟的输入来看,这一路称为"外部时钟模式1"。通过这一路的外部时钟有ETR引脚的信号ITR信号(ITR信号来自其他定时的TRGO处, 连接方式见下图:TIM2的ITR0连到TIM1的TRGO上,TIM2的ITR1连到TIM8的TRGO上,TIM2的ITR2连到TIM1的TRG3上,TIM2的ITR3连到TIM4的TRGO上)**,**可以实现定时器级联的功能。

通过这一路的外部时钟有**TI1F_ED,**这里连接的是输入捕获单元的CH1引脚,也就是从CH1引脚获得时钟,后面加ED,是边沿的(Edge)意思,也就是通过这一路输入的时钟,上升沿和下降沿均有效。

最后还能通过TI1FP1TI2FP2获得。其中TI1FP1连接到CH1引脚的时钟,其中TI2FP2连接到CH2引脚的时钟。

总结:外部时钟模式1的输入可以是ETR引脚、其他定时器、CH1引脚的边沿、CH1引脚和CH2引脚;一般情况外部时钟通过ETR引脚就可以了。

如果使用外部时钟,首选ETR引脚外部时钟模式2的输入。

定时的编码器接口,可以读取正交编码器的输出波形。

再看下面的电路,主要是两部分:

输出比较电路:总共有4个通道,分别对应CH1-CH4的引脚,可以用于输出PWM波形,驱动电机

输入捕获电路:总共有4个通道,分别对应CH1-CH4的引脚,可以用来测量输入方波的频率等

中间寄存器是捕获/比较寄存器,是输入捕获和输出比较共用的电路。输入捕获和输出比较不能同时使用。

1.1.3 高级定时器

和通用定时器相比多的地方,第一个是申请中断的地方,增加了重复次数计数器,实现每个几个计数周期才发生一次更新事件和更新中断(原来是每个计数周期都会发生更新),相当于对输出的更新信号又做了一次分频(59s*65536)

下面的是高级定时器对输出比较模块的升级了

DTG(Dead Time Generate)死区生成电路,右边的输出引脚由原来的一个变为两个互补的输出,可以输出一对互补的PWM波,这些电路是为了驱动三相无刷电机的(四轴飞行器、电动车的后轮、电钻等)

最后一部分就是刹车输入功能,为了给电机驱动提供安全保障的。如果外部引脚TIMx_BKIN(break in)产生刹车信号或者内部时钟失效,产生了故障,那么控制电路就会自动切断电机的输出,防止意外的发生。

1.2 定时中断基本结构

相关推荐
yutian06062 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程5 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉9 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6779 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式科普10 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
嵌入式大圣10 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室10 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费10 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_3975623112 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo201712 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范