总是弄混stm32CNT和CCR寄存器怎么办?
别慌!这俩确实是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的值。
更多推荐



所有评论(0)