定时器类型
类型 | 编号 | 总线 | 功能 |
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
一个芯片一般会有很多个定时器,所以后面会有编号进行区分;
基本定时器
预分频器、计数器、自动重装载寄存器构成了一个基本的计数计时电路,叫做时基单元;预分频器连接的是基准计数时钟的输入,而基本定时器只能使用内部时钟,可以认为预分频器直接连接到内部时钟,使用的是内部时钟,内部时钟来自RCC_TIMxCLK,一般都是系统主频72MHz;
预分频器,对输入的时钟进行分频,寄存器写0的时候,就是不分频,72M;如果写1(2分频),那就是36M,写2(3分频),频率就是24M,预分频器的值和实际分频系数差了1;
计数器,可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1;
自动重装载寄存器,保存计数的目标值,计算器一直计数,达到计数器的目标值后,就产生一个中断,并清空计数器的值;计算值等于自动重装值的中断,叫更新中断,更新中断后就会通往nvic,再配置好nvic的定时器通道,那定时器的更新中断就能得到CPU的响应了;
主模式触发DAC功能:使用DAC的时候,产生DAC波形,可以不用CPU参与;正常需要在定时器中断中跑一段时钟输出程序来产生波形,用了这个主模式可以利用定时器的更新事件,映射到触发输出TRGO的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器更新后,就不需要通过中断来触发DAC转换了,也就不需要CPU进行参与了;
通用定时器
通用定时器除了支持基本定时器那种向上计数模式,还支持向下计数(和向上计数相反)和中央对齐的计数模式(先向上递增,达到重装值,触发中断,再向下递减,减到0,触发中断,依次循环);
基本定时器只支持向上计数,通用定时器和高级定时器支持向上、向下计数和中央对齐计数;一般常用的还是向上计数模式;
时钟源选择:基本定时器只能选择内部时钟(系统频率,72MHz),通用定时器可以选择外部时钟(ETR)、配置好极性选择、边沿检测、预分频器,经过滤波器滤波就可以得到得到较为稳定的信号,经过ETRF就可以作为时基单元的输入时钟用来进行计数(外部时钟模式2);
TRGI也可以提供时钟,这一路主要是用来作为触发输入使用的,可以触发定时器的从模式,TRGI作为外部时钟使用时,这一路叫做“外部时钟模式1”,经过的时钟有ETR(两路,也可以从ETRF)、ITR信号(来自其他定时器的TRGO,可以实现级联)、TI1F_ED(连接捕获单元CH1的引脚,ED是边沿的意思,通过的上升沿和下降沿都有效)、TI1FP1、TI2FP2;
下面ch1~ch4,左边是用来做输入捕获的,右边用来做输出比较;
高级定时器
高级定时器右边多了个重复次数计数器,相当于二次分频,普通计时器达到计数值后就会触发重置,有了这个重复次数计数器,达到计数器的值后才会触发重置(中断)
定时中断基本结构
最重要的时基单元部分:有预分频器、计数器、自动重装器三个寄存器构成,能完成计数功能;
下面运行控制,就是控制寄存器的一些位,比如启动停止、向上计数、向下计数等;
左边是为计数器提供时钟部分,可选择内部时钟或者外部时钟;
右边是计时到了 触发中断,中断信号会在状态寄存器里置一个中断标志位,这个标志位会通过中断输出控制,到NVIC申请中断;中断输出控制用来控制需要哪个中断,计时器里还有别的地方会申请中断,不只是计数到了,中断输出的允许位;
预分频器时序
参数从1变到2时,值写入预分频控制器后需要有一段缓冲,缓冲器里值改变时,定时器时钟才发生变化