Skip to content

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 视角)控制了什么?
CNTCounter计数器跑腿的当前时间 (0 → Max)
ARRAuto-Reload自动重装值终点线频率 / 周期 (跑完一圈要多久)
CCRCapture/Compare比较值警戒线占空比 (一圈里有多少时间是通电的)

公式

占空比 (亮度) = CCR / (ARR + 1)