TIM简介
定时器可以对输入的时钟进行计数,并在计数值达到设定值时中断。
16位计数器,预分频器,自动重装寄存器的时基单元,在72MHz的计数频率下可以实现最大59.65s的计时。
不仅具备计时器的中断功能,而且还包含外部时钟源选择,输入捕获,输出捕获,编码器接口,主从触发模式等多种选择
根据复杂度和应用场景分为了高级定时器,通用定时器,基本定时器三种类型。
TIM定时器类型
类型 | 编号 | 总线 | |
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
注:STM32F103C8T6只有TIM1-TIM4
1.基本定时器
时基单元:
1.预分频器(PSC):
对内部时钟进行分频,输出频率=输入频率/(预分频值+1),因为这个预分频器是16位的,所以最大值是65535(从0开始计数)。
2.CNT计数器:
在内部时钟经过预分频器分频后,每来一个上升沿CNT计数器+1,CNT计数器同样也是16位的,最大值也是65535(从0开始计数)。
3.自动重装载寄存器:
自动重装载寄存器储存的值时CNT计数器的目标值,当CNT计数器达到自动重装载寄存器设定的值时,产生一个中断(向上的箭头),(这种中断我们一般叫做更新中断,更新中断后就会前往NVIC),并清空CNT计数器。向下的箭头代表会产生一个事件叫更新事件,可以触发内部其他电路的工作。自动重装载寄存器同样也是16位的,最大值也是65535(从0开始计数)。
主模式
由于DAC转换在使用更新中断需要频繁调用中断,影响主程序的运行和其他中断的响应。所以可以使用主模式可以把更新事件映射到TRGO的位置,然后TRGO连接到DAC触发转换引脚上,这样定时器的更新就不需要通过中断来触发DAC转换了,在主模式下TRGO会自动触发DAC转换,实现了硬件的自动化,这是主模式的作用。
2.通用定时器
时基单元
和通用计数器基本一样, 但是基本定时器的CNT计数器只支持向上计数,通用定时器的CNT计数器支持向上/向下/中央对齐计数。
时钟源选择
1.内部时钟源(CK_INT)
72Mhz时钟
2.外部时钟源模式1
ETR引脚
ITRx:实现定时器的级联
例:初始化TIM3,再使用主模式把他的更新事件映射到TRGO上,接着再初始化TIM2,选择ITR2,然后再选择时钟位外部模式时钟1,这样就实现了定时器的级联。
TI1_ED:
TI1_ED连接的是输入捕获单元CH1引脚,ED是边沿的意思,通过这一路的时钟上升沿和下降沿都有效。
TI1FP1 TI1FP2
连接方式如图所示。
3.外部时钟源模式2
引脚号 | 引脚名称 | 类型 | I/O口电平 | 主功能 | 默认复用功能 | 重定义功能 |
10 | PA0-WKUP | I/O | PA0 | WKUP/USART2_CTS/ADC12_IN0/TIM2_CH1_ETR | ||
33 | PA12 | I/O | FT | PA12 | USART1_RTS/USBDP/CAN_TX/TIM1_ETR |
在TIMx_ETR引脚输入一段方波信号,依次配置边沿检测(ETP),预分频器(ETPS),滤波器(ETF),在通过ETRF进入触发控制器。
想在ETR外部引脚提供时钟,或者=想对ETR时钟进行计数,把这个定时器当计数器用的情况下,就可以配置这一路的电路。
3.高级定时器
可以用来控制三相无刷电机,这里我不进行过多讨论。