TIM(定时器)简介
定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;
16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;
不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能;
根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型;
定时器类型:
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
基本定时器:
预分频器、计数器和自动重装寄存器三个寄存器构成了最基本的计数计时电路,所以这一块就叫做时基单元。
预分频器之前连接的是基准计数时钟的输入,由于基本定时器只能选择内部时钟,所以可以认为输入端直接连接到内部时钟CK_INT,内部时钟的来源是RCC_TIMxCLK,这里的频率值一般都是系统的主频72MHz,所以通向时基单元的计数基准频率就是72M。
预分频器可以对这个72MHz的计数时钟进行预分频。比如这个寄存器写0,那就是不分频或者说是1分频,这时输出频率 = 输入频率 = 72MHz;如果预分频器写1,那就是2分频,输出频率 = 输入频率 / 2 = 36MHz。以此类推,所以预分频器的值和实际的分频系数相差了1,即实际分频系数 = 预分频器的值 + 1。这个预分频器是16位,所以最大值可以写65535,也就是65536分频。
计数器可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1,计数器也是16位,所以里面的值可以从0一直加到65535,如果再加计数器就会回到0重新开始,所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值是,产生中断,那就完成了定时作用。
自动重装寄存器是存储目标值的寄存器,它也是16位,它存的是我们写入的计数目标,在运行的过程中,计数值不断自增,自动重装值是固定的目标,当计数值等于自动重装值时就是计时时间到了,那它就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。
这里代表会产生中断信号,这种计数值等于重装值一般叫做“更新中断”,更新中断之后就会通往NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。
这里代表的是会产生一个事件,这里对应的事件就叫做“更新事件”,更新事件不会触发中断,但可以触发内部其他电路工作。
通用定时器:
基本计时器只支持向上计数模式,通用计时器和高级定时器支持向上计数、向下计数、中央对齐这三种模式。
向上计数模式:计数器从0开始,向上自增,计到重装值,清零同时申请中断,然后开始下一轮,依次循环。
向下计数模式:从重装值开始向下自减,减到0之后回到重装值同时申请中断,然后继续下一轮,依次循环。
中央对齐计数模式:从0开始先向上自增,计到重装值,申请中断,然后再向下自减,减到0再申请中断,然后继续下一轮,依次循环。
这是内外时钟源选择和主从触发模式的结构,对于基本定时器而言,定时器只能选择内部时钟,也就是系统频率的72MHz,通用定时器的时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟。
这是 输出比较电路,总共有四个通道,分别对应CH1到CH4引脚,可以用于输出PWM波形、驱动电机;
这是输入捕获电路,也是四个通道,对应的也是CH1到CH4的引脚,可以用于测输入方波的频率等;
中间的这个寄存器是捕获/比较寄存器,是输入捕获和输出比较电路共用的,因为输入捕获和输出比较不能同时使用,所以这里的寄存器是共用的,引脚也是共用的。
高级定时器:
申请中断的地方增加了一个重复次数计数器,有了这个计数器之后,就可以实现每隔几个计数周期才发生一次更新事件和更新中断,相当于对输出的更新信号又做了一次分频,大大的提升了定时时间。