目录

概述

1. 基础定时器模式(时基单元)

1.1 定时周期计算

2. PWM 波形生成(输出比较模式)

2.1 PWM 频率与占空比

2.2 预装载与影子寄存器

2.3 配置实例(CH1 输出 1 kHz,50% 占空比)

3. 输入捕获模式

3.1 输入通道信号调理

3.2 典型应用:测量高电平脉宽

3.3 PWM 输入模式

4. 正交编码器接口

4.1 工作原理

4.2 配置要点

5. 定时器同步与主从模式

5.1 主模式配置(TIM4 作为主)

5.2 从模式配置(TIM4 作为从)

6. 引脚重映射(AFIO)

7. 中断与 DMA

8. 性能与注意事项

总结对比:TIM4 与其它定时器


概述

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. 配置通道 1 为上升沿捕获,使能捕获中断。

  2. 中断服务中记录 CCR1 值 t1,然后切换为下降沿捕获。

  3. 下降沿到来时记录 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 被释放。

重映射步骤:

  1. 使能 AFIO 时钟:RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

  2. 修改 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 开销。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐