1. TIM2 到 TIM5 主要特性
通用 TIMx 定时器具有以下特性:
● 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减 自动重载计数器 (由影子寄存器结构的自动重载寄存器和计数器CNT组成)。
● 16 位 可编程预分频器PSC,用于对计数器时钟频率进行分频 (即运行时修改),分频系数介于 1 到 65536 之间。将CK_PSC分频为CNT_PSC
● 多达 4 个 独立通道 (既可以输入也可以输出,主要结构是输入/比较寄存器),可用于:
— 输入捕获
— 输出比较
— PWM 生成(边沿和中心对齐模式)
— 单脉冲模式输出
● 使用外部信号控制定时器且可实现多个定时器互连的同步电路。
● 发生如下事件时生成 中断/DMA 请求:
— 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)——TIM_IT_Update
— 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
— 输入捕获 —— TIM_IT_CC1
— 输出比较
● 支持定位用增量(正交)编码器和霍尔传感器电路
● 外部时钟触发输入或逐周期电流管理
2. TIM2到TIM5主要功能
1). 时基单元
时基单元顾名思义即定时器中对时基脉冲进行计数的模块。STM32中定时器的时基单元又可称为可编程定时器,因为可以通过预分频寄存器PSC配置时基脉冲的预分频系数。计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行读写操作。
时基单元包括:
● 计数器寄存器 (TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)——影子寄存器——实现缓冲
● 自动重载寄存器 (TIMx_ARR)——影子寄存器结构——实际是两个寄存器,即自动重载寄存器本身和其
自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当 计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为 0 时,将发送更新事件。该更新事件也可由软件产生。
预分频寄存器也有和自动重载寄存器相似的结构:由于该控制寄存器具有缓 冲功能,因此预分频器可实现实时更改。而新的预分频比将在下一更新事件发生时被采用。
2). 计数器模式
递增计数模式——在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新 从 0 开始计数并生成计数器上溢事件。每次发生计数器上溢时会生成更新事件。
递减计数模式——在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0, 然后重新从自动重载值开始计数并生成计数器下溢事件。
中心对齐模式(递增/递减计数)——在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1, 生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。
关于更新事件:每次发生计数器上溢或下溢时会生成更新事件。
发生更新事件时,将更新所有寄存器且将更新标志(TIMx_SR 寄存器中的 UIF 位)置 1(取 决于 URS 位):
● 预分频器的缓冲区中将重新装载预装载值(TIMx_PSC 寄存器的内容)。
● 自动重载活动寄存器将以预装载值 (TIMx_ARR 寄存器的内容)进行更新。注意,如果更新操作是由计数器上溢触发的,则自动重载寄存器在重载计数器之前更新,因此,下一个计数周期就是我们所希望的新的周期长度(计数器被重载新的值)。
3). 时钟选择
计数器时钟可由下列时钟源提供:
● 内部时钟 (CK_INT)
● 外部时钟模式 1:外部输入引脚 (TIx)
● 外部时钟模式 2:外部触发输入 (ETR),仅适用于 TIM2、TIM3 和 TIM4。
● 内部触发输入 (ITRx):使用一个定时器作为另一个定时器的预分频器,例如可以将定时器配置为定时器 2 的预分频器。
注:内部时钟源 (CK_INT)——如果禁止从模式控制器(TIMx_SMCR 寄存器中 SMS=000),则 CEN 位、DIR 位(TIMx_CR1 寄存器中)和 UG 位(TIMx_EGR 寄存器中)为实际控制位,并且只能通过软件进行更改(UG 除外,仍自动清零)。当对 CEN 位写入 1 时,预分频器的时钟就由内部时钟 CK_INT 提供。
4). 捕获/比较通道
每个捕获/比较通道均围绕一个捕获/比较寄存器(包括一个影子寄存器)、一个捕获输入阶段(数字滤波、多路复用和预分频器)和一个输出阶段(比较器和输出控制)构建而成。
输入阶段对相应的 TIx 输入进行采样,生成一个滤波后的信号 TIxF。然后,带有极性选择功 能的边沿检测器生成一个信号 (TIxFPx),该信号可用作从模式控制器的触发输入,也可用作 捕获命令。该信号先进行预分频 (ICxPS),而后再进入捕获寄存器。
附:捕获/比较通道的应用
1).输入捕获模式
在输入捕获模式下,当相应的 ICx 信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx) 来锁存计数器的值。发生捕获事件时,会将相应的 CCXIF 标志(TIMx_SR 寄存器)置 1, 并可发送中断或 DMA 请求(如果已使能)。如果发生捕获事件时 CCxIF 标志已处于高位, 则会将重复捕获标志 CCxOF(TIMx_SR 寄存器)置 1。可通过软件向 CCxIF 写入 0 来给 CCxIF 清零,或读取存储在 TIMx_CCRx 寄存器中的已捕获数据。向 CCxOF 写入 0 后会将 其清零。
2).PWM 输入模式
3).强制输出模式
4).输出比较模式
5).PWM 模式
6).单脉冲模式
7).发生外部事件时清除 OCxREF 信号
8).编码器接口模式
9).定时器输入异或功能
10).定时器与外部触发同步
11).定时器同步
12).调试模式
3.该类定时器的配置
1).时基单元配置
typedef struct
{
uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.
This parameter can be a number between 0x0000 and 0xFFFF */
uint16_t TIM_CounterMode; /*!< Specifies the counter mode.
This parameter can be a value of @ref TIM_Counter_Mode */
uint32_t TIM_Period; /*!< Specifies the period value to be loaded into the active<span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<pre class="fragment"><span class="comment"> Auto-Reload Register at the next update event.</span>
This parameter must be a number between 0x0000 and 0xFFFF. */
uint16_t TIM_ClockDivision; /*!< Specifies the clock division.
This parameter can be a value of @ref TIM_Clock_Division_CKD */
<span style="white-space:pre"> </span> /* CKD:时钟分频 (Clock division)此位域指示定时器时钟 (CK_INT) 频率与数字滤波器所使用的采样时钟(<span style="white-space:pre"> </span> ETR、TIx)之间的分频比*/ uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter reaches zero, an update event is generated and counting restarts from the RCR value (N). This means in PWM mode that (N+1) corresponds to: - the number of PWM periods in edge-aligned mode - the number of half PWM period in center-aligned mode This parameter must be a number between 0x00 and 0xFF. @note This parameter is valid only for TIM1 and TIM8. */} TIM_TimeBaseInitTypeDef;