STM32有3种类型的定时器,分别是基本定时器、通用定时器和高级定时器。
基本定时器有TIM6和TIM7,通用定时器有TIM2、TIM3、TIM4和TIM5,高级定时器有TIM1和TIM8。根据芯片的型号不同定时器的个数也会有所区别。本文主要介绍通用定时器。
通用定时器拥有定时中断、主模式触发DAC、内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能。
通用定时器结构
上图为通用定时器的结构框图,可分为3个部分:时钟选择、时基单元、输入捕获/输出比较。
时钟选择
STM32微控制器的通用定时器时钟可以由4个来源:
内部时钟(CK_INT)、外部输入引脚(TIX)、外部触发输入(ETR)、内部触发输入(ITRX)
内部时钟是常用的定时器时钟,通用定时器挂载在APB1总线上,APB1总线最大支持36MHz的时钟频率,但定时器的输入任是72MHz,因为APB1总线在连接定时器时有还有一个倍频器,当APB1预分频系数为1时则频率不变,否则频率乘2。也就是说如果AHB总线上的时钟频率是72MHz的话,那么在到达APB1总线时,APB1预分频器需要对其二分频得到36MHz的频率,此时APB1总线的频率为36MHz,该时钟频率在输入到定时器时通过倍频器,倍频器根据条件判断需要对其2倍频又得到72MHz的时钟频率。所以定时器的内部时钟输入都是72MHz。
外部触发输入(ETR):是指来自外部的信号输入,这个信号经过极性选择、边沿检测和预分频器然后通过滤波后输入定时器内部作为时钟。例如外部输入一个方波,当每到一个上升沿或下降沿时读取一个信号,这个信号给到定时器内部作为定时器的时钟来源。
外部触发输入脚(TIX):框图中的外部触发输入脚输入信号为TI1FP1和TI2FP2,这两个输入信号分别来自TIMX_CH1和TIMX_CH2,即定时器的两个输入捕获通道。与外部触发输入(ETR)相比,这两个信号不仅可以通过数据选择器的选择作为定时器的时钟输入,还可以输入到编码器接口。
内部触发输入(TIRX):主要用于定时器的级联,由框图左侧可以看出,触发控制器的的输出TRGO可以连接至其他定时器,TRGO连接其他定时器时即是连接在了其他定时器的TIRX输入上。TGRO表示定时器的更新或中断事件。
时基单元
定时器的时基单元由3个部分构成,分别是PSC预分频系数、CNT计数器和ARR自动重装载寄存器。
PSC预分频器是对输入的时钟信号进行分频,若预分频器中的值为0则是1分频,若预分频器中的值是1则是2分频。即实际分频系数=预分频器值+1。CNT计数器就是对预分频之后的时钟进行计数,可以是向上计数模式、向下计数模式或中央对齐模式。以向上计数模式为例,开始时CNT计数器中的值是0,每当计数时钟是上升沿时,CNT计数器中的值加1。当达到目标值时CNT计数器清零,而目标值就存放在ARR自动重装载计数器中。