CCR
Capture / Compare Register(捕获/比较寄存器)。
它是定时器里最忙碌、玩法最多的寄存器。根据你是“输出”还是“输入”,它有两种截然不同的身份。
输出模式(OC)
输出模式(主动造波)是为了在单位时间内控制输出高低电平的占比。
深层含义: 这是一个 “数字到模拟 (D/A)” 的过程。
- STM32 只有 0V 和 3.3V。
- 通过控制占比(占空比),你骗过了人眼(LED亮度)或骗过了电机(转速)。
- 你让
50%的高电平看起来像1.65V的电压。
“阈值” (Threshold) 这是最常用的场景,,也就是 输出捕获 (Output Capture)。,也就是 PWM (脉冲宽度调制)。
核心逻辑:比大小
想象 CNT 是一个正在不断爬楼梯的小人(从 0 爬到 ARR)。 CCR 就是你在楼梯中间画的一条 红线。
- 当小人在红线以下 (
CNT < CCR): 输出高电平(灯亮)。 - 当小人在红线以上 (
CNT >= CCR): 输出低电平(灯灭)。 - 当小人爬顶 (
CNT == ARR): 掉回 0,重新开始。
效果:控制占空比 (Duty Cycle)ARR (周期): 固定为 100。
- 情况 A: 设
CCR = 10-> 只有 10% 的时间是亮的 -> 灯很暗。 - 情况 B: 设
CCR = 50-> 有 50% 的时间是亮的 -> 中等亮度。 - 情况 C: 设
CCR = 90-> 有 90% 的时间是亮的 -> 灯很亮。
结论:在输出模式下,改 CCR 就是改电压/亮度/速度。
输入模式(IC)
输入模式(被动读波)是为了记录单位时间内高电平持续的时间。
深层含义: 这是一个 “时间量化” 的过程。
- 外部世界发生了什么,STM32 不知道。
- 它拿着一个秒表(CNT),时刻准备着。
- 外部信号一来,它立刻记录下当前的时间点。
“抓拍” (Snapshot) 这是用来测量的场景,也就是 输入捕获 (Input Capture)。
核心逻辑:存快照
CCR 不再是你要去设定的值,而是变成了一个存放数据的容器。
- 场景: 这里的 CNT 依然在不停地数数(0, 1, 2, 3...)。
- 动作: 当外部引脚上出现一个信号跳变(比如传感器发来一个脉冲)时,硬件会瞬间把 当前 CNT 的值 复制并锁存到 CCR 里。
- 目的: 你读取 CCR,就知道“刚才那个信号是在第几毫秒发生的”。
效果: 记录板
- CNT:是一直在走的秒表。
- 外部信号: 运动员冲过终点线。
- CCR: 裁判手里的记录板。
- 动作: 运动员撞线的瞬间,裁判看一眼秒表(CNT),把时间写在记录板(CCR)上。
总结三剑客的关系
| 寄存器 | 英文全称 | 中文名 | 作用 (PWM 视角) | 控制了什么? |
|---|---|---|---|---|
| CNT | Counter | 计数器 | 跑腿的 | 当前时间 (0 → Max) |
| ARR | Auto-Reload | 自动重装值 | 终点线 | 频率 / 周期 (跑完一圈要多久) |
| CCR | Capture/Compare | 比较值 | 警戒线 | 占空比 (一圈里有多少时间是通电的) |
公式
占空比 (亮度) = CCR / (ARR + 1)