STM32定时器分类
STM32的定时器分为很多类,按照功能的不同可以分为:
- 高级定时器(TIM1和TIM8)
- 通用定时器(TIM2-TIM5)
- 基本定时器(TIM6和TIM7)
- 看门狗定时器
- SysTick定时器
本章主要讲解通用定时器。
STM32通用定时器主要是通过可编程预分频器(PSC)驱动的16位自动装载寄存器(CNT)构成。它的每个通用定时器都是完全独立的,没有互相共享任何资源。
通用TIMx(TIM2、TIM3、TIM4、TIM5)定时器功能包括:
- 16位向上、向下、向上/向下自动装载计数器
- 16位可编程(可实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间
- 4个独立通道(TIMx_CH1~4),这些通道可以用来作为:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)或单脉冲模式输出
- 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用一个定时器控制另一个定时器)的同步电路
- 产生相应事件的中断/DMA
更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
触发事件:(计数器启动、停止、初始化或由内部/外部触发计数)
输入捕获
输出比较 - 针对定位的增量(正交)编码器和霍尔传感器
- 触发输入作为外部时钟或者按周期的电流管理
定时器中断实验
计数器时钟频率
通用定时器框图:
通用定时器的时钟源可以通过TIMx_SMCR来进行配置。默认是000由内部时钟进行驱动。
这里通用定时器的时钟频率是由APB1的分频系数决定,如果APB1的预分频系数是1,则通用定时器的时钟频率等于APB1的时钟频率,否则为APB1时钟的2倍。
使用SystenInit函数初始化的时候,各时钟频率如下:
SYSCLK = 72M
AHB时钟 = 72M
APB1时钟=36M
所以APB1的分频系数=AHB/APB1=2
由此可得CK_INT的时钟频率为2*36M = 72M.
计数器的最终的频率还需要经过PSC预分频计算才能得到