1. 定时器输出比较的核心机制
定时器输出比较功能是嵌入式系统中非常实用的一个特性,它允许我们通过比较计数器和比较寄存器的值来控制输出引脚的电平状态。这个功能在生成PWM波形、控制电机转速、实现呼吸灯效果等方面有着广泛的应用。
让我用一个简单的比喻来解释这个过程:想象一下定时器就像一个不断循环计数的秒表,CCR寄存器是你设定的一个目标值。当秒表的计数小于目标值时,输出引脚保持高电平;当计数达到或超过目标值时,输出引脚变为低电平。这样周而复始,就产生了PWM波形。
在实际的STM32单片机中,定时器模块包含几个关键组件:时基单元负责产生基准时钟,计数器CNT负责循环计数,捕获/比较寄存器CCR存储预设值,输出比较电路负责比较CNT和CCR的值并控制输出电平。
CNT计数器是一个16位或32位的寄存器,它会根据时钟信号不断递增或递减。CCR寄存器也是一个同样位宽的寄存器,用于存储我们设定的比较值。当CNT的值与CCR匹配时,就会触发比较事件,输出比较电路会根据配置的模式来改变输出引脚的状态。
2. CCR寄存器与CNT计数器的协同工作原理
CCR寄存器和CNT计数器的配合是实现输出比较功能的关键。CNT计数器会按照设定的计数模式(向上、向下或中心对齐)不断变化,而CCR寄存器则保持我们预设的固定值。
在向上计数模式下,CNT从0开始递增,达到ARR(自动重装载寄存器)的值后重置为0,然后重新开始计数。在这个过程中,输出比较电路会实时比较CNT和CCR的值:
- 当CNT < CCR时,输出高电平
- 当CNT ≥ CCR时,输出低电平
通过调整CCR的值,我们可以改变高电平和低电平的时间比例,从而控制PWM波的占空比。举个例子,如果ARR设置为100,CCR设置为30,那么占空比就是30%。这意味着在一个完整的周期内,输出引脚有30%的时间为高电平,70%的时间为低电平。
输出比较模式有多种配置选项,最常用的是PWM模式1和PWM模式2。在PWM模式1下,当CNT < CCR时输出有效电平,CNT ≥ CCR时输出无效电平。PWM模式2则正好相反。有效电平可以是高电平也可以是低电平,这取决于极性设置。
在实际编程中,我们需要配置好几个关键参数:预分频器PSC决定计数器的时钟频率,ARR决定计数周期,CCR决定占空比。这三个参数的配合使用,可以产生各种频率和占空比的PWM波形。
3. PWM波形生成的实战应用
PWM(脉冲宽度调制)是输出比较功能最典型的应用之一。通过调节PWM波的占空比,我们可以控制电机的转速、LED的亮度、舵机的角度等。
让我分享一个实际项目中调节LED亮度的例子。首先需要配置定时器:设置PSC为83,ARR



被折叠的 条评论
为什么被折叠?



