[信息] STM32定时器的TIMx_CC事件与TIMx_TRGO事件

[复制链接]
465|0
heimaojingzhang 发表于 2025-11-10 21:39 | 显示全部楼层 |阅读模式
理解这两个事件的区别和用途,对于掌握定时器的高级应用(如触发ADC、DMA、或其他定时器)至关重要。

我们来详细解析一下TIMx_CC事件和TIMx_TRGO事件。

核心概念总结
TIMx_CC事件:与通道相关,是输入捕获或输出比较功能成功执行时产生的一个内部信号。它更关注定时器某个特定通道上的“瞬间”行为。
TIMx_TRGO事件:与定时器本身相关,是定时器根据预设条件(如更新、使能、特定通道事件等)向外输出的一个触发信号。它更像是定时器的一个“总触发输出”,用于同步其他外设。
1. TIMx_CC事件
CC 代表 Capture/Compare,即输入捕获/输出比较。

本质:它是一个内部事件,标志着某个通道(Channel 1/2/3/4)上的特定操作已经完成或条件已经满足。
产生来源:
输出比较:当计数器CNT的值与捕获/比较寄存器CCR的值匹配时,会产生一个比较匹配事件。这个事件可以触发中断或DMA请求,并且可以控制对应的输出引脚电平(产生PWM、单脉冲等)。
输入捕获:当在通道的输入引脚上检测到指定的边沿(上升沿、下降沿)时,计数器的当前值会被锁存到CCR寄存器中,并产生一个输入捕获事件。这个事件可以触发中断或ADC启动或DMA请求,用于测量频率、脉宽等。
主要用途:
在中断服务程序,DMA传输中处理通道相关的数据。
例如,在输入捕获中断中,读取CCR的值来计算脉冲宽度;在输出比较中断中,更新CCR的值以改变PWM占空比。
相关寄存器:
TIMx_CCRx: 捕获/比较寄存器,存放要比较的值或捕获到的值。
TIMx_SR: 状态寄存器,其中的CCxIF标志位用来指示CC事件是否发生。
TIMx_DIER: 中断/DMA使能寄存器,其中的CCxIE位用于使能CC事件的中断,CCxDE用于使能DMA请求。
简单来说,TIMx_CC事件是某个通道“私有的”捕获/比较成功信号。

2. TIMx_TRGO事件
TRGO 代表 TRiGger Output,即触发输出。

本质:它是一个由主定时器(Master Timer)产生的、输出到内部的触发信号,用于启动、同步或触发其他外设(从设备)的操作。
产生来源:它是一个可配置的信号,来源是定时器内部的各种事件。通过 TIMx_CR2 寄存器中的 MMS 位来选择TRGO输出什么。
复位:MMS=000 - 复位事件(UG位被置位)时产生TRGO。
使能:MMS=001 - 使能事件(CEN位被置位)时产生TRGO。
更新:MMS=010 - 更新事件发生时产生TRGO。这是非常常用的模式。
比较脉冲:MMS=011 - 捕获/比较事件发生时产生TRGO。
比较OC1REF:MMS=100 - 使用通道1的比较输出作为TRGO。
比较OC2REF:MMS=101 - 使用通道2的比较输出作为TRGO。
比较OC3REF:MMS=110 - 使用通道3的比较输出作为TRGO。
比较OC4REF:MMS=111 - 使用通道4的比较输出作为TRGO。
主要用途:
触发ADC转换:让定时器的更新事件或比较事件自动启动ADC采样,实现精准的定时采样。
触发DMA传输:例如,在定时器更新时,自动将CCR寄存器的新值通过DMA传输过去,实现无CPU干预的复杂PWM波形生成。
触发其他定时器:作为主定时器,去启动、复位或时钟从定时器,实现定时器的级联。
相关寄存器:
TIMx_CR2: 控制寄存器2,其中的MMS[2:0] 位用于选择TRGO的输出源。
简单来说,TIMx_TRGO事件是定时器“公用的”同步信号,是定时器对外宣告“我这边发生了某件事”的方式。

对比表格

14941690d6f0e6065d.png

实际应用举例
场景:使用一个定时器(TIM2)精确控制ADC,以固定频率采样一个模拟信号,并在每次PWM脉冲开始时更新占空比。

这个场景可以同时用到这两种事件:

TIMx_TRGO的应用:

将TIM2配置为PWM输出模式(例如通道1)。
将TIM2的TRGO源配置为 OC1REF(即通道1的比较匹配信号)。
将ADC的触发源配置为 EXTI线 或 Timer2的TRGO。
结果:每次TIM2的通道1发生比较匹配(即PWM周期开始时),TIM2都会产生一个TRGO信号,这个信号会自动触发ADC开始一次转换。这样就实现了PWM波形与ADC采样的严格同步。
TIMx_CC事件的应用:

使能TIM2通道1的输出比较中断 或 DMA请求。
在比较匹配中断中,你可以计算下一个PWM周期的占空比并更新CCR1寄存器。
或者,更高效的方式是使用CC事件的DMA请求:当比较匹配发生时(CC事件),会产生一个DMA请求,DMA控制器会自动将内存中预存的下一个占空比值搬运到CCR1寄存器中,完全无需CPU介入。
总结
当你需要处理定时器某个通道自身的事情(比如读捕获值、改比较值)时,你关注的是 TIMx_CC事件。
当你需要让定时器去控制、启动、同步其他外设时,你配置和使用的是 TIMx_TRGO事件。
在很多复杂的应用中,这两个事件会协同工作,共同构建出高效、精准的嵌入式控制系统。
————————————————
版权声明:本文为CSDN博主「zhmc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42963788/article/details/153771571

您需要登录后才可以回帖 登录 | 注册

本版积分规则

117

主题

4404

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部