STM32 定时器笔记

发表于 2025-12-31 00:00 1828 字 10 min read

This post is not yet available in English. Showing the original.
STM32 定时器基础、CubeMX 配置与常见模式实践记录。

定时器

定时器基础知识

基础构成

  • 时钟来源: 内部 APB 时钟/ETR 外部时钟/内部触发 ITR;定时器时钟频率 = 定时器输入时钟 ÷ (PSC+1)。
  • 计数器 CNT: 16/32 位向上、向下或中心对齐计数模式;溢出或到达 ARR 触发更新事件。
  • 预分频 PSC: 将输入时钟再分频,减少计数速度;更新事件才会装载新 PSC。
  • 自动重装载 ARR: 计数上限或下限,决定周期;开启预装载时(ARPE)在更新事件同步装载。

关键模式

  • 单脉冲模式(One Pulse): 响应一次触发产生有限脉冲,常用于测距等。
  • 输出比较/定时输出: CCRx 与 CNT 比较,匹配时产生事件,可配置翻转/置位/清零。
  • PWM: 由 ARR 设周期,CCR 设占空比;上升沿/下降沿对齐或中心对齐可减小谐波。
  • 输入捕获: 捕获外部边沿时间戳到 CCR,结合 PSC/ARR 可测频率或脉宽。
  • 编码器模式: 两路正交输入解码位移/速度;选择 TI1/TI2 极性、滤波。
  • 基础定时: 部分定时器(如 TIM6/7)仅生成更新事件驱动 DAC 或触发。

事件与中断/DMA

  • 更新事件 UEV: CNT 到 ARR 或方向翻转时触发;可触发中断或 DMA,常用来做“心跳”。
  • 触发输出 TRGO: 可配置为 UEV/OCxREF/OCxREF 清零,用于驱动 ADC、DAC、另一个定时器。
  • 中断: 更新 UIE、捕获比较 CCxIE、触发 TIE、突破 BDTR 故障;注意在 NVIC 和寄存器同时开启。
  • DMA: 可把更新或捕获比较事件搬运 ARR/CCR 数据,适合连续波形更新。

输出相关细节

  • CCR 预装载: PWM 时建议开 OCxPE,避免更新窗口撕裂;在更新事件同步写入。
  • 极性: 可配置 CHx 极性高/低,PWM 互补输出(CHxN)需高级定时器并设置死区时间 BDTR.DTG。
  • 刹车/死区: 高级定时器支持刹车输入 BKIN、死区插入、输出使能 MOE,保障功率驱动安全。

输入滤波与时序

  • 数字滤波: ICF 位可设采样次数与分频,滤除毛刺;过强滤波会增加响应延迟。
  • 边沿选择: CCxP/CCxNP 选择上升/下降/双边沿;双边沿测频时需注意计数翻倍。

常用公式

  • 计数时钟 f_{cnt} = \dfrac{f_{tim}}
  • 更新频率 f_{update} = \dfrac{f_{cnt}}
  • PWM 频率 f_{pwm} = \dfrac{f_{tim}}

实用小贴士

  • 修改 PSC/ARR/CCR 后若开预装载,需等待一次更新事件才生效,可手动 UG 产生。
  • 中心对齐模式下计数往返一次算一个周期,实际频率为对齐模式的 2 倍计数范围。
  • 多定时器级联时,用 TRGO/ITR 做主从同步,避免相位漂移。

CubeMX 配置

CubeMX 配置 STM32F103C8 定时器界面: TIM配置 选项卡:

  • Slave mode:
    • Disable
    • External Clock Mode 1
    • Reset Mode
    • Gate Mode
    • Trigger Mode
  • Tigger Source:
    • Disable
    • ITR0
    • ITR1
    • ITR2
    • ITR3
    • ETR1
    • Tl1_ED
    • Tl1FP1
  • Clock Source:
    • Disable
    • Internal Clock
    • ETR2
  • Channel1/2/3/4:
    • Disable
    • Input Capture direct mode
    • Input Capture indirect mode
    • Input Capture tiggered by TRC
    • Output Compare No Output
    • Output Compare CH1/2/3/4
    • PWM Generation No Output
    • PWM Generation CH1/2/3/4
  • Combine Channels:
    • Disable
    • Encoder Mode
    • PWM Input on CH1
    • PWM Input on CH2
    • XOR ON/HALL Sensor Mode
  • Use ETR as Clearing Source
  • XOR activation
  • One Pulse Mode

CubeMX 配置选项解读

Slave Mode (从模式选择)

用于设定当前定时器如何响应来自其他定时器或外部引脚的触发信号。

  • Disable: 禁用从模式。定时器独立运行,仅受自身控制寄存器支配。
  • External Clock Mode 1: 外部时钟模式 1。计数器 CNT 不再由内部时钟驱动,而是由选定的触发源(如 TIx 或 ETR)的边沿驱动。常用于“外部脉冲计数”。
  • Reset Mode: 复位模式。当选定的触发信号出现上升沿时,CNT 计数器立即清零并重新开始计数。常用于“清除计数器”或“同步相位”。
  • Gate Mode: 门控模式。触发信号为高电平时,CNT 正常计数;信号为低电平时,CNT 停止计数。常用于“测量高电平持续时间”。
  • Trigger Mode: 触发模式。在触发信号的上升沿启动计数器运行。注意:启动后,计数器会一直运行,直到手动停止。常用于“延迟启动”。

Trigger Source (触发源选择)

决定谁来触发上述的“从模式”动作。

  • ITR0/1/2/3: 内部触发输入。来源于其他定时器的 TRGO 输出。具体对应关系需查阅芯片手册的 TIMx internal trigger connection 表。常用于“定时器级联(主从模式)”。
  • ETR1: 外部触发输入。信号通过外部引脚 ETR 进入,经过极性、预分频和滤波后作为触发源。
  • TI1_ED: 通道 1 边沿检测(Edge Detector)。TI1 的上升沿和下降沿都会产生触发。
  • TI1FP1 / TI2FP2: 滤波后的通道信号。即来自输入引脚 CH1/CH2 且经过滤波和极性选择后的信号。

Clock Source (时钟源)

决定计数器 CNT 计数的脉冲来源。

  • Internal Clock: 内部时钟。默认选项,使用来自 APB 预分频器处理后的内部时钟信号。
  • ETR2: 外部时钟模式 2。使用 ETR 引脚作为时钟源。与 External Clock Mode 1 的区别在于 ETR2 使用专用路径,不占用从模式控制器。

Channel 1/2/3/4 (通道模式)

  • Input Capture direct mode: 直接输入捕获。物理引脚 CHx 的信号连接到对应的 CCRx 寄存器。用于“测频”或“测脉宽”。
  • Input Capture indirect mode: 间接输入捕获。物理引脚 CHx 的信号连接到相邻的 CCRy 寄存器(如 CH1 连接到 CCR2)。常用于“PWM 输入模式”,即一个引脚信号同时测量周期和占空比。
  • Output Compare No Output: 输出比较(无输出)。CNT 与 CCR 匹配时产生中断或事件,但不翻转物理引脚电平。常用于“软件定时执行任务”。
  • Output Compare CHx: 输出比较。匹配时翻转物理引脚电平。
  • PWM Generation CHx: PWM 输出。根据 ARR 和 CCR 的值在引脚上生成脉冲宽度调制信号。

Combine Channels (组合通道)

  • Encoder Mode: 编码器模式。利用 TI1 和 TI2 两个通道的正交信号自动增减 CNT。用于“电机测速”或“旋钮位置检测”。
  • PWM Input on CH1/2: PWM 输入模式。自动占用两个捕获寄存器,一个测周期,一个测占空比。
  • XOR ON/HALL Sensor Mode: 异或/霍尔传感器模式。将 CH1/2/3 的输入进行异或运算后再接入触发控制器。常用于“直流无刷电机(BLDC)的换向控制”。

其他勾选项

  • Use ETR as Clearing Source: 使用 ETR 作为清除源。当 ETR 信号为高时,强制清零输出参考信号(OCxREF)。常用于“过流保护”。
  • XOR activation: 异或激活。开启通道间的异或逻辑。
  • One Pulse Mode: 单脉冲模式。计数器在发生一次溢出(Update 事件)后自动停止(设置 CR1 寄存器的 OPM 位)。