STM32 定时器实战记录(二)—— 输出比较(Output Compare)模式详解 在上一篇中我们从“时基单元”出发搞清楚了定时器是如何计数的。本篇我们不写实验只回答一个问题定时器除了计数还能做什么​答案是输出比较Output Compare简称 OC。一、定时器不止会“数数”STM32 的通用定时器TIM2 / TIM3 / TIM4 / TIM5核心由三部分组成┌────────────┐│ 时基单元 │ ← 计数CNT / PSC / ARR├────────────┤│ 输入捕获 IC │ ← 测量外部信号├────────────┤│ 输出比较 OC │ ← 控制输出引脚└────────────┘输出比较的作用只有一个在“指定的计数值”到达时改变输出引脚的电平状态。二、输出比较的核心思想1️⃣ 三个关键寄存器寄存器作用CNT当前计数值ARR计数上限周期CCR比较值触发点2️⃣ 输出比较的工作逻辑CNT 不断向上计数↓CNT CCR ?↓是 → 硬件自动改变输出引脚电平↓CNT 继续计数✅整个过程不需要 CPU 参与​✅由定时器硬件自动完成三、输出比较 ≠ PWM这是最容易混淆的地方。1️⃣ 输出比较OC关注的是“什么时候发生动作”动作通常是置高置低翻转输出波形不一定连续2️⃣ PWM关注的是“高电平占多少比例”输出波形连续、周期性是输出比较的一种特殊模式✅一句话总结PWM 是输出比较的子集输出比较不一定是 PWM。四、输出比较的几种工作模式STM32 标准库中定义了 7 种 OC 模式其中最常见的有模式行为TIM_OCMode_Timing​只产生事件不改变引脚TIM_OCMode_Active​CNT CCR → 输出高TIM_OCMode_Inactive​CNT CCR → 输出低TIM_OCMode_Toggle​CNT CCR → 翻转TIM_OCMode_PWM1​小于 CCR 为有效电平TIM_OCMode_PWM2​大于 CCR 为有效电平 其中Toggle 模式最能体现“输出比较”的本质PWM1 / PWM2 是为功率控制设计的五、为什么要用输出比较✅ 1️⃣ 精确控制时间点精确到定时器时钟周期不受软件延时误差影响✅ 2️⃣ 不占用 CPU不需要中断不需要 while(1)✅ 3️⃣ 可预测、可重复同样的 CCR → 同样的行为非常适合实时系统六、输出比较在 STM32 中的位置APB1 时钟↓PSC 分频↓CNT 计数↓CCR 比较↓硬件控制 GPIO✅ 所有动作都在硬件层完成​✅ 软件只负责“配置规则”七、常见误解澄清❌输出比较必须进中断​✅ 错OC 可以完全不进中断❌输出比较只能用来闪灯​✅ 错OC 可用于触发 ADC触发 DMA产生精确时序驱动步进电机❌PWM 比 OC 更高级​✅ 错PWM 只是 OC 的一种用法八、本篇小结输出比较的本质是CNT 与 CCR 的比较输出比较的核心是硬件自动改变引脚输出比较的意义是精确、可靠、无 CPU 负担理解输出比较是理解 PWM、输入捕获、编码器接口的前提。九、下一篇预告STM32 定时器实战记录三—— PWM 驱动 LED 与直流电机我们将看到PWM 如何利用输出比较产生连续波形占空比如何影响 LED 亮度和电机转速为什么 PWM 是“控制功率”的最佳方式