STM32 定时器(主从模式)
:想象定时器是一个快递站长,TRGO 就是站长发出的指令广播——不同指令(触发源)会让其他外设(快递员)执行不同任务。 向其他外设(如其他定时器、ADC、DAC)发送同步信号。:定时器作为“主设备”时,通过 。)、从设备触发使能(如 ADC 的。
·
🚦 一、TRGO 是什么?
核心作用:定时器作为“主设备”时,通过 TRGO(Trigger Output) 向其他外设(如其他定时器、ADC、DAC)发送同步信号。
类比理解:想象定时器是一个快递站长,TRGO 就是站长发出的指令广播——不同指令(触发源)会让其他外设(快递员)执行不同任务。
🔧 二、8 种触发源详解
1. 基础控制类
-
TIM_TRGOSource_Reset(复位信号)- 行为:定时器软件复位(如调用
TIM_GenerateEvent(TIMx, TIM_EventSource_Update))时发出 TRGO 脉冲。 - 应用场景:强制同步所有从设备清零计数器(如多电机协同启动)。
- 代码配置:
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Reset);
- 行为:定时器软件复位(如调用
-
TIM_TRGOSource_Enable(启动信号)- 行为:定时器启动计数(
TIM_Cmd(ENABLE))时发出 TRGO 脉冲。 - 应用场景:主定时器启动时,同步触发从定时器开始计数。
- 行为:定时器启动计数(
-
TIM_TRGOSource_Update(更新事件)- 行为:定时器计数器溢出(CNT=ARR)时自动发出 TRGO 脉冲。
- 应用场景:周期性触发 ADC 采样(如每秒采集 1000 次温度数据)。
2. 输出比较参考类
TIM_TRGOSource_OCxRef(通道参考信号)- 行为:将定时器通道的 REF 信号(如 PWM 波形)直接作为 TRGO 输出。
- 关键特性:
OC1Ref~OC4Ref对应通道 1~4 的原始 PWM 信号(未经过极性处理)。- 信号与 PWM 完全同步,精度达纳秒级。
- 应用场景:
- 生成同步 PWM 群控(如 LED 灯带全亮/全灭)。
- 触发 DAC 输出模拟波形(如音频合成)。
- 配置示例(使用通道1的 PWM 作为 TRGO):
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_OC1Ref);
3. 专用信号类
-
TIM_TRGOSource_OCx(输出比较事件)- 行为:通道的 CNT=CCRx 事件(如 PWM 占空比切换点)触发 TRGO 脉冲。
- 与
OCxRef的区别:类型 信号形式 触发时机 OCxRef持续电平 整个 PWM 周期有效 TIM_TRGOSource_OCx单次脉冲 仅 CNT=CCRx 时触发 - 应用场景:
- 精确控制步进电机换相时机(每 10ms 触发一次相位切换)。
⚡ 三、TRGO 工作流程(以更新事件触发 ADC 为例)
配置代码:
// TIM2 配置:每 1ms 发出更新事件 TRGO
TIM_TimeBaseInitTypeDef tb;
tb.TIM_Period = 1000-1; // ARR = 999
tb.TIM_Prescaler = 72-1; // 72MHz→1MHz
TIM_TimeBaseInit(TIM2, &tb);
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); // 更新事件触发 TRGO
// ADC 配置:响应 TIM2_TRGO
ADC_InitTypeDef adc;
adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;
ADC_Init(ADC1, &adc);
⚠️ 四、新手常见问题
-
TRGO 无输出
- 原因:未启动定时器(
TIM_Cmd(ENABLE))或未配置主模式。 - 解决:检查
TIMx_CR2寄存器的MMS位(主模式选择)。
- 原因:未启动定时器(
-
信号不同步
- 对策:
- 使用
OCxRef替代OCx(避免脉冲遗漏)。 - 启用预装载寄存器(
TIM_OCxPreloadConfig(ENABLE))避免占空比更新毛刺。
- 使用
- 对策:
-
高级定时器限制
- 注意:TIM1/TIM8 需使能主输出(
TIM_CtrlPWMOutputs(ENABLE)),否则 TRGO 无效。
- 注意:TIM1/TIM8 需使能主输出(
💎 五、触发源选型指南
| 触发源 | 信号类型 | 精度 | 适用场景 | 新手推荐 |
|---|---|---|---|---|
TIM_TRGOSource_Update |
周期脉冲 | ★★★☆☆ | 定时触发 ADC/DAC | ★★★★☆ |
TIM_TRGOSource_OC1Ref |
连续电平 | ★★★★★ | 同步 PWM 群控 | ★★★☆☆ |
TIM_TRGOSource_Reset |
单次脉冲 | ★★☆☆☆ | 多设备强制复位 | ★★☆☆☆ |
TIM_TRGOSource_OC1 |
单次脉冲 | ★★★★☆ | 精密事件触发(如电机换向) | ★★★☆☆ |
口诀:
- 要周期采样 → 选
Update- 要精密同步 → 选
OCxRef- 要事件驱动 → 选
OCx
🔍 六、为什么这么设计?
- 硬件级同步:TRGO 直接由定时器硬件生成,无需 CPU 干预,确保时序精确(如电机控制中电流采样与 PWM 严格对齐)。
- 灵活性:8 种触发源覆盖从基础定时到复杂波形同步的全场景需求。
- 低延迟:信号通过内部总线传递(如 ITRx),延迟仅 10~100ns。
✅ 总结:新手操作步骤
- 明确需求:判断需要周期触发(
Update)还是实时同步(OCxRef)。 - 配置主定时器:
- 时基单元(PSC/ARR)
- 触发源类型(
TIM_SelectOutputTrigger())
- 配置从设备:
- ADC/DAC:选择外部触发源为
TIMx_TRGO - 从定时器:设置触发输入为
ITRx(如TIM_TS_ITR0)
- ADC/DAC:选择外部触发源为
- 启动与验证:
- 用示波器观察 TRGO 引脚(如 TIM2_CH1/PA0)或触发逻辑分析仪。
终极技巧:
遇到问题先检查 三使能:定时器使能(TIM_Cmd)、主模式配置(TIMx_CR2.MMS)、从设备触发使能(如 ADC 的EXTTRIG)。
更多推荐



所有评论(0)