STM32定时器主从级联:TRGO信号与ITRx内部触发实战解析
1. STM32定时器级联的核心价值与应用场景
在实际的嵌入式开发中,我们经常会遇到单个定时器无法满足需求的情况。比如需要测量极低频率的信号,或者实现超长周期的定时任务。STM32的定时器级联功能就是为了解决这类问题而设计的硬件级方案。
我记得第一次做频率计项目时就踩过坑。当时用单个定时器测量低频信号,结果发现误差大得离谱。后来才发现问题所在:16位定时器的计数上限是65535,当信号频率低于1kHz时,计数器的溢出速度跟不上信号变化,导致测量精度急剧下降。这就是为什么要使用定时器级联的根本原因。
通过主从定时器级联,我们可以实现:
- 32位计数器扩展:将两个16位定时器组合成一个32位定时器,计数范围从65535扩展到4294967295
- 精度提升:在测量低频信号时,大幅提高测量精度和稳定性
- 复杂定时序列:实现多个定时器的同步启动和精确的时间序列控制
举个例子,在我做的频率计项目中,使用TIM2作为主定时器,TIM3作为从定时器。单用TIM3时,1kHz以下信号的测量误差超过5%,而级联后能准确测量0.0167Hz到400kHz的信号,精度提升了两个数量级。
2. 深入理解TRGO信号与ITRx内部触发机制
2.1 TRGO信号:主定时器的控制输出
TRGO(Trigger Output)是主定时器向其他外设发送的同步信号。你可以把它想象成一个指挥棒,主定时器通过这个指挥棒来控制从定时器的动作。
在STM32中,不同的定时器可以产生不同类型的TRGO信号。通过配置TIMx_CR2寄存器的MMS(Master Mode Selection)位,我们可以选择以下几种输出模式:
| MMS值 | 触发信号源 | 适用场景 |
|---|---|---|
| 000 | 复位事件 | 同步多个外设 |
| 001 | 使能信号 | 控制外设使能 |
| 010 | 更新事件 | 定时器级联常用 |
| 011 | 比较脉冲信号 | PWM控制 |
| 100 | 比较OC1REF信号 | 高级定时控制 |
| 101 | 比较OC2REF信号 | 高级定时控制 |
| 110 | 比较OC3REF信号 | 高级定时控制 |