1. 高级控制定时器输出比较原理与工程实现
在STM32高级控制定时器(Advanced-control Timer,如TIM1、TIM8)的外设功能中,输出比较(Output Compare, OC)是构建精确时序控制、PWM生成、电机驱动及波形合成等关键应用的核心机制。它并非简单的GPIO电平翻转,而是一套由硬件定时器自主执行、高度精确且低CPU开销的信号生成系统。理解其底层原理与配置逻辑,是掌握高级定时器工程化应用的前提。本节将从寄存器级行为、信号流路径、模式选择逻辑到实际代码配置,进行系统性剖析。
1.1 输出比较的本质:硬件自主的电平决策引擎
输出比较的本质,是让定时器的计数器(CNT)值与用户预设的比较寄存器(CCR)值进行实时比对,并在两者相等(或CNT ≥ CCR,取决于计数模式)的瞬间,触发一个硬件事件——输出比较标志(OCxIF)。这个标志本身是一个内部参考信号(OCxREF),它不直接驱动引脚,而是作为后续一系列硬件逻辑的输入源。整个过程完全由定时器硬件自主完成,无需CPU干预,因此具有纳秒级的精度和极低的抖动。
以TIM1向上计数模式为例:当TIM1使能后,CNT从0开始递增。假设用户将通道1的比较寄存器CCR1设置为1000,那么当CNT从999递增至1000的边沿,硬件立即置位OC1IF标志。此时,CNT继续计数,而OC1IF信号被送入后续的“输出控制”逻辑单元。这个单元根据用户通过CCMR1寄存器配置的输出模式,决定最终施加到GPIO引脚(如PA8)上的电平状态。整个过程的延迟仅由几个门电路的传播时间决定,远低于任何软件中断响应周期。
这种设计的价值在于解耦:CPU只需在初始化阶段一次性写入CCR值,并在需要改变波形时动态更新该值