STM32通用定时器
一、通用定时器简介
对于Cortex-M3内核的STM32F1系列通常有8个16位定时器、0个32位定时器;而Cortex-M4内核的STM32F4系列通常拥有12个16位定时器;2个32位定时器。在此,我们以通用定时器TIM2到TIM5为例。
通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。
它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比
较和 PWM)。
使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制
到几毫秒。
这些定时器彼此完全独立,不共享任何资源。
(一)通用定时器TIM2~TIM5的特性
-
16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计 数器(TIMx_CNT)。
-
16 位可编程预分频器(TIMx_PSC),用于对计数器时钟频率进行分频 (即运行时修改),分频系数介 于 1 到 65536 之间。
-
4 个独立通道(TIMx_CH1~4),可用于:
(1)输入捕获
(2)输出比较
(3)产生PWM
(4)输出单脉冲 -
使用外部信号控制定时器且可实现多个定时器互连的同步电路。
-
发生如下事件时生成中断/DMA 请求:
(1) 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
(2) 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
(3) 输入捕获
(4) 输出比较 -
支持定位用增量(正交)编码器和霍尔传感器电路
-
外部时钟触发输入或逐周期电流管理
(二)计数器模式
-
通用计数器有三种计数方式:递增计数、递减计数、递增/递减计数计数。
-
递增计数: 计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新 从 0 开始计数并生成计数器上溢事件。
-
递减计数: 计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0, 然后重新从自动重载值开始计数并生成计数器下溢事件。
-
递增/递减计数: 计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)—1,
生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从
0 开始重新计数。
(三)通用计时器框图
1.时钟源
图中黄色方框内是为通用计数器提供的时钟,STM32F4系列的时钟来源有以下四种:
- 内部时钟源(CK_INT):如果禁止从模式控制器(TIMx_SMCR 寄存器中 SMS=000),则 CEN 位、DIR 位 (TIMx_CR1 寄存器中)和 UG 位(TIMx_EGR 寄存器中)为实际控制位,并且只能通过软
件进行更改(UG 除外,仍自动清零)。当对 CEN 位写入 1 时,预分频器的时钟就由内部时
钟 CK_INT 提供。实际由APB1倍频产生。 - 外部时钟源模式 1:当从模式控制器 (TIMx_SMCR )中的 SMS=111 时,可选择此模式。实际由蓝色方框中的TI1、TI2、TI3和TI4产生。
- 外部时钟源模式 2:通过在 从模式控制器(TIMx_SMCR )寄存器中写入 ECE=1可选择此模式。实际由外部引脚TIMx_ETR经极性选择、边沿检测、预分频器和滤波后产生。注意:此模式仅适用于 TIM2、TIM3 和 TIM4。
- 内部触发输入(ITRx):內部触发输入口ITR0、ITR1、ITR2和ITR3,用于定时器级联时由其他定时器产生。
2. CK_PSC 时钟和CK_CNT时钟
- 如图红色方框所示,CK_PSC是由时钟源产生用于时基单元的时钟。
- CK_CNT时钟是被时基单元中的PSC预分频器分频后产生的时钟、是最终作用于时基单元的时钟。
3. 时基单元
绿色方框内是时基单元部分
时基单元包括:
- 计数器寄存器 (TIMx_CNT)
- 预分频器寄存器 (TIMx_PSC)
- 自动重载寄存器 (TIMx_ARR)
(1)计数器寄存器 (TIMx_CNT):根据我们所选择的计数模式进行计数。
(2)预分频器寄存器 (TIMx_PSC):预分频器可对计数器时钟频率进行分频,分频系数介于 1 到 65536 之间。该预分频器基于 16 位/32 位寄存器(TIMx_PSC 寄存器)所控制的 16 位计数器。由于该控制寄存器具有缓 冲功能,因此预分频器可实现实时更改。而新的预分频比将在下一更新事件发生时被采用。
(3) 自动重载寄存器 (TIMx_ARR):自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当 计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为 0 时,将发送更新事件。该更新事件也可由软件产生。
(4)影子寄存器:
如图所示:寄存器下方有阴影的寄存器为影子寄存器。我们可以理解为有影子的寄存器。实际上这个寄存器是对应着两个寄存器:一个是它的本体,称为预装载寄存器;一个是他的影子,就是影子寄存器了。实际存在的、我们可以直接操作的寄存器就是预装载寄存器,但是在程序执行过程中真正产生作用的却是影子寄存器。
4.输入捕获
图中蓝色方框中为输入捕获通道。在输入捕获通道中产生的信号经滤波和边沿检测后再经过预分频器,最后到达捕获/比较寄存器。捕获/比较寄存器检测到跳变沿后对计数器的值进行锁存,预分频器可以设置多少个跳变沿检测一次。
5.输出比较
图中紫色部分为输出比较部分,此功能用于控制输出波形,或指示已经过某一时间段。