别慌!这俩确实是STM32定时器里最容易搞混的概念,我用大白话给你拆开讲清楚,保证你看完就不混了。

1. 本质区别

CNT Counter 定时器的“计数器”,记录定时器已经跑了多少个时钟周期。它是一个自动递增/递减的变量,会随着定时器时钟不断变化。 像秒表的“当前计时数”,每过1秒就+1。 

CCR Capture/Compare Register 捕获/比较寄存器,用来和CNT做比较,或者存储捕获到的CNT值。它是一个由你设置的固定值,不会自动变化。 像秒表的“目标计时数”,比如你设置为10,当秒表走到10时就触发提醒。 

 

 

2. 工作场景举例

 

(1)PWM输出模式

 

- CNT:从0开始,每来一个定时器时钟就+1,直到达到ARR的值后自动清零,循环往复。

- CCR:你设置的比较值,比如ARR=100,CCR=30。

- 当  CNT < CCR  时,输出高电平;当  CNT >= CCR  时,输出低电平。

- 这样就得到了30%占空比的PWM波,这里CCR直接决定了占空比。

 

(2)输入捕获模式

 

- CNT:持续递增的计数器。

- CCR:当外部信号出现边沿时,硬件会立刻把当前CNT的值“抓”到CCR里保存起来。

- 比如第一次捕获到上升沿时CCR1=100,第二次捕获到上升沿时CCR1=500,那么周期就是  500-100=400  个时钟周期。

 

(3)编码器模式

 

- CNT:会根据编码器A/B相的脉冲自动递增或递减,直接反映编码器的旋转位置和方向。

- CCR:在这个模式下基本用不到,因为我们只关心CNT的变化。

 

3. 一句话总结

- CNT是“动态的计数器”,随时间/脉冲自动变化。

- CCR是“静态的参考值”,由你设定,用来和CNT比较或捕获CNT的值。

更多推荐