STM32F103RET6 定时器 4(TIM4)深度技术解析
目录
2.3 配置实例(CH1 输出 1 kHz,50% 占空比)
概述
TIM4 是 STM32F103RET6 中的一个 16 位通用定时器,具备 4 个独立捕获/比较通道。其核心功能包括:基础定时、PWM 生成、输入捕获、正交编码器接口以及定时器间的触发同步。TIM4 挂载于 APB1 总线,当 APB1 预分频器(PPRE1)不等于 1 时,TIM4 的时钟频率 TIMxCLK 为 APB1 频率的两倍。在典型系统配置(SYSCLK = 72 MHz,AHB = 72 MHz,APB1 = 36 MHz,PPRE1 = 2)下,TIMxCLK = 2 × 36 MHz = 72 MHz。
TIM4 的主要技术规格:
-
计数器宽度:16 位(0 ~ 65535)
-
计数方向:向上、向下、中心对齐(1/2/3 模式)
-
预分频器范围:1 ~ 65536(由 16 位寄存器 PSC 实现)
-
捕获/比较通道数:4,每个通道可独立配置为输入或输出
-
中断源:更新事件、捕获/比较事件、触发事件
1. 基础定时器模式(时基单元)
时基单元由三个关键寄存器组成:
-
预分频器(TIMx_PSC):16 位,对
TIMxCLK进行分频。实际计数时钟频率f_CK_CNT = TIMxCLK / (PSC + 1)。 -
自动重装载寄存器(TIMx_ARR):16 位,定义计数器的周期值。启用预装载功能时,写入值在更新事件(UEV)发生时生效。
-
计数器(TIMx_CNT):16 位,实时计数值,可随时读写。
1.1 定时周期计算
在向上计数模式下,定时器从 0 计到 ARR,然后重新从 0 开始,并产生一个更新事件(UEV)。一次完整计数周期的时间为:

更新事件的中断请求可通过 TIMx_DIER 寄存器的 UIE 位使能。
配置例程(寄存器级):
// 假设 TIMxCLK = 72 MHz,目标周期 100 ms
// 选择 PSC = 7200 - 1 = 7199,则 CK_CNT = 10 kHz
// ARR = 1000 - 1 = 999,周期 = 100 ms
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // 使能 TIM4 时钟
TIM4->PSC = 7199;
TIM4->ARR = 999;
TIM4->CNT = 0;
TIM4->CR1 |= TIM_CR1_CEN; // 使能计数器
2. PWM 波形生成(输出比较模式)
TIM4 的四个通道均可独立产生 PWM 信号,支持 边沿对齐模式(向上或向下计数)和 中心对齐模式(用于降低谐波)。核心在于通道的捕获/比较寄存器(TIMx_CCR1~4)与 CNT 的比较结果,以及输出极性控制。
2.1 PWM 频率与占空比

2.2 预装载与影子寄存器
为保证无毛刺的 PWM 波形更新,应启用 CCRx 预装载功能(TIMx_CCMRx 的 OCxPE 位)和 ARR 预装载功能(TIMx_CR1 的 ARPE 位)。新写入的 CCRx/ARR 值将在下一个更新事件(UEV)时被装入影子寄存器。
2.3 配置实例(CH1 输出 1 kHz,50% 占空比)
// 假设 TIMxCLK = 72 MHz
// 设置 PSC = 72 - 1 = 71,CK_CNT = 1 MHz
// ARR = 1000 - 1 = 999,则 f_PWM = 1 kHz
// CCR1 = 500,占空比 50%
TIM4->PSC = 71;
TIM4->ARR = 999;
TIM4->CCR1 = 500;
TIM4->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE; // PWM 模式 1,预装载使能
TIM4->CCER |= TIM_CCER_CC1E; // 输出使能
TIM4->CR1 |= TIM_CR1_ARPE | TIM_CR1_CEN;
3. 输入捕获模式
输入捕获用于测量外部信号的频率、周期、占空比或脉宽。基本原理:检测到指定边沿(上升沿/下降沿)时,将 CNT 的瞬时值锁存到 CCR 寄存器并触发中断或 DMA。
3.1 输入通道信号调理
每个捕获通道可独立配置:
-
输入滤波器(TIMx_CCMRx 的 ICxF 位域,4 位):以采样频率
f_DTS对输入信号进行采样,连续 N 次相同才确认边沿,用于去抖。N 值从 2 到 8,采样频率可设为f_CK_INT的 1/2、1/4、1/8。 -
输入分频器(ICxPSC 位域):每检测到 1、2、4 或 8 个边沿才进行一次捕获,用于低频信号的测量。
-
捕获边沿选择(TIMx_CCER 的 CCxP 和 CCxNP):上升沿、下降沿或双沿。
3.2 典型应用:测量高电平脉宽
-
配置通道 1 为上升沿捕获,使能捕获中断。
-
中断服务中记录 CCR1 值
t1,然后切换为下降沿捕获。 -
下降沿到来时记录
t2,高电平时间 =(t2 - t1) × T_CK_CNT(需考虑计数器溢出)。
3.3 PWM 输入模式
TIM4 支持“PWM 输入模式”,硬件自动测量 PWM 信号的周期和占空比:将一个 TIx 信号同时映射到两个通道(例如 TI1FP1 和 TI1FP2),一个捕获周期,另一个捕获占空比。
4. 正交编码器接口
TIM4 可直接与增量式旋转编码器(AB 相)连接,无需软件干预即可更新计数器的值(根据相位差自动加减)。
4.1 工作原理
-
两个输入引脚(CH1 → A相,CH2 → B相)配置为编码器模式(
TIMx_SMCR的 SMS = 001/010/011b)。 -
硬件根据 A、B 两相的相位关系决定计数方向:
-
正向:A 相领先 B 相 90° → 计数器递增。
-
反向:B 相领先 A 相 90° → 计数器递减。
-
-
计数速率:可在每个边沿(TI1、TI2 或两者同时)进行更新。
4.2 配置要点
-
选择计数模式:
SMS = 011b表示在 TI1 和 TI2 的上升沿和下降沿都计数,提供最高四倍分辨率。 -
滤波器设置:根据编码器信号的噪声程度配置 ICxF 滤波。
-
计数范围:16 位,需配合 ARR 实现溢出管理。
TIM4->SMCR |= TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1; // 编码器模式 3(双沿计数)
TIM4->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E; // 使能 CH1/CH2 输入
TIM4->CCMR1 |= TIM_CCMR1_IC1F_0; // 简单滤波,例如 IC1F = 001b
5. 定时器同步与主从模式
TIM4 可以作为主定时器向其他定时器输出触发信号(TRGO),也可以作为从定时器接收外部触发信号(ITR、ETR、TIx)。
5.1 主模式配置(TIM4 作为主)
通过 TIMx_CR2 的 MMS 位域选择 TRGO 信号源:
-
000:复位事件
-
001:使能事件
-
010:更新事件
-
011:比较脉冲(OC1REF)
5.2 从模式配置(TIM4 作为从)
TIMx_SMCR 的 SMS 位域定义从模式动作:
-
000:关闭
-
001:编码器模式
-
010:触发模式(TRGI 信号使计数器启动)
-
011:门控模式(TRGI 高电平时计数)
-
100:复位模式(TRGI 上升沿复位 CNT 及预分频器)
-
101/110/111:保留/外部时钟模式等
典型应用:TIM1 产生 PWM,TIM4 在其使能时开始计数,实现时序级联。
6. 引脚重映射(AFIO)
TIM4 的默认引脚为 PB6(CH1)、PB7(CH2)、PB8(CH3)、PB9(CH4)。通过 AFIO_MAPR 寄存器可实现部分重映射到 PD12(CH1)、PD13(CH2),PB6/PB7 被释放。
重映射步骤:
-
使能 AFIO 时钟:
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; -
修改
AFIO->MAPR中的TIM4_REMAP位(2 位):-
00:无重映射
-
01:部分重映射(CH1→PD12,CH2→PD13,CH3/CH4 保持不变)
-
10:保留
-
11:完全重映射(本芯片不支持完全重映射)
-
7. 中断与 DMA
-
中断源:更新中断(UIE)、捕获/比较中断(CC1IE~CC4IE)、触发中断(TIE)。通过
TIMx_DIER使能。 -
DMA:支持更新事件 DMA 请求(UDE)、捕获事件 DMA 请求(CC1DE~CC4DE)。可在中断负载过高时使用 DMA 传输捕获数据或批量更新 CCR。
8. 性能与注意事项
-
计数器溢出频率:当 ARR = 0xFFFF,PSC = 0 时,最快计数频率为 72 MHz,每 0.91 μs 溢出一次。
-
最小脉宽测量:输入捕获的最小分辨率为 1 / f_CK_CNT,若 CK_CNT = 72 MHz,则理论分辨率 ~13.9 ns。实际受滤波器及 IO 翻转速率限制(约 50 MHz)。
-
编码器模式下的计数上限:最大输入边沿速率 = f_CK_CNT / 2,四倍频模式下最大 18 MHz 方波输入(72 / 4)。
-
输出比较精度:PWM 分辨率 = log₂(ARR+1) 位。ARR 最大 65535 时可达到 16 位分辨率,但频率会降低。
总结对比:TIM4 与其它定时器
| 特性 | TIM4(通用) | TIM1/TIM8(高级) | TIM6/TIM7(基本) |
|---|---|---|---|
| 计数器宽度 | 16 位 | 16 位 | 16 位 |
| 计数模式 | 向上/向下/中心对齐 | 向上/向下/中心对齐 | 向上 |
| 捕获/比较通道数 | 4 | 4 + 互补输出 | 0 |
| 死区插入/刹车功能 | 无 | 有 | 无 |
| 编码器接口 | 支持 | 支持 | 不支持 |
| 触发输出(TRGO) | 支持 | 支持 | 支持 |
| 典型应用 | 通用定时、PWM、捕获 | 电机控制、电源逆变 | DAC 触发、基础时基 |
TIM4 在 STM32F103 平台上提供了成本、功能和引脚数量之间的良好平衡,是大多数实时控制、信号测量和波形生成任务的理想选择。掌握其寄存器级配置逻辑,可以最大限度地发挥硬件性能,避免软件定时或位翻转带来的 CPU 开销。
更多推荐

所有评论(0)