STM32标准库开发——TIM定时器中断


学习笔记来自:江科大自化协教程!!!


TIM定时器介绍

  • 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
  • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
    STM32标准库开发——TIM定时器中断_第1张图片

STM32F103C8T6仅有定时器资源:TIM1、TIM2、TIM3、TIM4,分别为一个高级定时器,三个通用定时器没有基本定时器。
拓展:主模式触发DAC(主从触发模式),它能让内部硬件在不受程序的控制下实现自动运行,在某些情境下可以极大减轻CPU的负担: 用途就是在使用DAC时可能用到DAC输出一段波形,需要每隔一段时间触发一次DAC,让它输出下一个电压点,正常思路为先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,,但这样会使主程序处于频繁被中断的状态,会影响主程序运行和其他中断的响应。所以定时器设计了一个主模式,主模式可把定时器的更新事件映射到触发输出TRGO(Trigger Out)的位置,TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要通过中断来触发DAC转换了!!

基本定时器介绍

STM32标准库开发——TIM定时器中断_第2张图片
图中控制器的预分频器、计数器、自动重装载寄存器三个寄存器构成了最基本的计数计时电路,所以这一块电路叫做时基单元。 预分频器之前连接的是基准计数时钟的输入,由于基本定时器只能选择内部时钟,所以可以直接认为预分频器前这根线直接连在了输入端的内部时钟CK_INT,内部时钟的来源是RCC_TIMxCLK,这里的频率一般是系统的主频72MHz,故而通向时基单元的计数基准频率就是72MHz。

首先是预分频器可对72MHz的计数时钟进行预分频,,比如它写0就是不分频或者说是1分频,此时输出频率=输入频率=72MHz;如果写1就是2分频,输出频率=输入频率/2=36MHz,写2为3分频以此类推,所以预分频器的值和实际的分频系数相差了1,即实际分频系数=预分频器的值+1,它为16位最大科协65535,也即65536分频。
然后是计数器,计数器可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿计数器的值加1,也是16位,值可以是0加到65535,如果超过就会从0重新开始,所以计数器的值在计时过程中会不断自增运行,当自增运行到目标值后产生中断,完成定时任务。
所以还需要一个存储目标值的寄存器——自动重装寄存器,也是16位用于存储计数目标,当计数超过目标值时它会产生一个中断信号使计数器清零(更新中断)。图中向上的箭头UI代表“更新中断”,更新中断之后就会通往NVIC,我们再配置好NVIC的定时器通道,那么定时器的更新中断就能够得到CPU的响应了;向下的箭头U代表“更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。

通用定时器介绍

STM32标准库开发——TIM定时器中断_第3张图片

  • 相较于基本定时器,通用定时器的结构更为复杂。时基单元基本结构和每部分工作流程与基本定时器一样,除了向上计数模式,通用和高级定时器还支持向下计数模式和中央对齐模式,向下计数:从重装值开始向下自减,减到0后回到重装值同时申请中断;中央对齐:从0开始先向上自增计到重装值申请中断,然后再向下自减减到0,再申请中断,依次循环。
  • 图的上半部分为内外时钟源选择和主从触发模式结构,基本定时器只能选择内部时钟(即系统频率72MHz),通用和高级的还可选择外部时钟。第一个是来自TIMx_ETR引脚上的外部时钟(外部时钟模式二,在PA0上接入时钟信号来当作时钟源),第二个是来自其他定时器的信号(ITRX),第三个是来自Tlx引脚。

高级定时器介绍

STM32标准库开发——TIM定时器中断_第4张图片

相较于通用定时器,高级定时器申请中断的地方增加了一个重复次数计数器,可以实现每隔几个计数周期才发生一次更新事件和更新中断(普通结构是每个计数周期都更新),相当于对输出信号又做了一次分频,提升了很多定时时间;
最后一部分为左下角刹车输入的功能,是为了给电机驱动提供安全保障,如果外部引脚BKIN(Break IN)产生刹车信号或者内部时钟失效产生了故障,那么控制电路就会自动切断电机的输出防止意外发生!


附录:

STM32标准库开发——TIM定时器中断_第5张图片
STM32运行程序前,先启用内部RC 作为系统时钟信号,待外部高速OSC震荡源稳定后使用外部时钟信号作为系统时钟信号,通过锁相环倍频至72MHZ,如无意外所有定时器最终的时钟信号也为72MHZ


你可能感兴趣的:(stm32,单片机,嵌入式硬件)