定时器的从模式

STM32定时器的从模式(Slave Mode)允许定时器响应外部或内部触发信号,实现同步、计数控制等功能。三种常用模式:复位模式、门控模式、触发模式。


1. 复位模式 (Reset Mode)

行为

  • 触发信号的有效沿到来时,立即将计数器 CNT 复位为 0。
  • 同时产生一个更新事件(UIF 和 TIF 均置位)。
  • 计数器继续计数,直到下一个触发信号再次复位。

典型用途

  • 测量脉冲周期/频率:用上升沿复位,同时记录 CNT 值。
  • 产生与外部信号同步的定时波形。

示例

配置 TIM2 为复位模式,触发源为 TI1 上升沿:

c

sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;

2. 门控模式 (Gated Mode)

行为

  • 触发信号的电平(高或低)控制计数器的启停。
  • 电平有效时,计数器按预分频器正常计数;无效时,计数器停止。
  • 不产生额外的更新事件,也不复位计数器。

典型用途

  • 测量脉冲宽度:高电平期间计数,低电平停止。
  • 实现外部时钟门控。

示例

配置 TIM2 为门控模式,触发源为 TI1 高电平有效:

c

sSlaveConfig.SlaveMode = TIM_SLAVEMODE_GATED;
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
// 极性需通过输入捕获配置

3. 触发模式 (Trigger Mode)

行为

  • 触发信号的有效沿到来时,启动计数器(从当前 CNT 值开始计数)。
  • 之后计数器持续运行,直到软件停止或发生溢出。
  • 不复位计数器,也不产生额外的更新事件。

典型用途

  • 外部信号同步启动 ADC 转换。
  • 实现单次或多次定时序列的同步启动。

示例

配置 TIM2 为触发模式,触发源为 ITR0(来自其他定时器):

c

sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;

对比总结

模式 触发沿作用 对计数器影响 产生更新事件 典型应用
复位模式 复位 CNT 为 0 立即清零 是(UIF+TIF) 周期测量、信号同步
门控模式 控制计数启停 保持或停止 否 脉宽测量
触发模式 启动计数 从当前值开始 否 同步启动定时

与中断区分的关联

  • 复位模式:在更新中断回调中检查 TIF 可区分是复位触发还是自动重装载溢出。
  • 门控模式:不会产生更新事件,因此不会进入 HAL_TIM_PeriodElapsedCallback。
  • 触发模式:仅启动计数,不产生更新事件,也不会进入更新中断(除非溢出)。

image-20260420163144341

  • 复位模式下 触发信号会使定时器重新开始计数并且还会触发定时器更新中断
  • 门模式下 高电平时定时器计数 低电平时定时器暂停
  • 触发模式下 触发信号可以使定时器开始计数,但不能停止计数,可以配合单脉冲模式使用
posted @ 2026-05-22 23:29  Cerulean26  阅读(73)  评论(0)    收藏  举报