定时器 计算器

STM32 定时器计算器

计算 PSC/ARR 值、实际定时器频率、误差,并处理 APB 定时器时钟倍频规则。

STM32 PSC 与 ARR 计算器

根据 APB clock、APB prescaler、目标频率和寄存器限制计算定时器寄存器值。

许多 STM32 在 APB prescaler 大于 1 时会把 timer clock 加倍。
Timer clock
168.00 MHz
PSC
2
ARR
55999
实际频率
1000.000 Hz
误差
0 ppm

寄存器计算使用 (PSC + 1) * (ARR + 1),不是 PSC * ARR。

公式说明

STM32 定时器更新频率是 timer_clock / ((PSC + 1) * (ARR + 1))。许多 STM32 系列在 APB prescaler 不为 1 时会加倍 timer clock。

这个计算器适合做什么

用它为周期中断、PWM 输出、捕获计时和简单 time base 选择 prescaler 与 auto-reload 值。输入 RCC 中真实配置的 APB clock 和 prescaler,再设置目标频率与寄存器上限。

关键参数

  • APB clock:PLL 和 APB prescaler 之后的总线时钟。
  • APB prescaler:用于判断 timer peripheral clock 是否倍频。
  • 目标频率:目标 update event、PWM base frequency 或 interrupt rate。
  • PSC/ARR 最大值:具体定时器的寄存器宽度限制,常见为 16-bit,也可能更宽。

复制到固件前检查

  • 确认 PLL 和总线分频后的 APB clock。
  • 确认 APB prescaler 大于 1 时 timer clock 是否倍频。
  • 无法精确匹配时,使用报告的实际频率和误差。

常见问题

如何计算 STM32 定时器 prescaler 和 period?

先确定实际 timer clock,包括 APB prescaler 大于 1 时常见的定时器时钟倍频规则。然后求解 timer_clock / ((PSC + 1) * (ARR + 1)),找到满足寄存器限制且最接近目标频率的 PSC/ARR。

为什么 STM32 定时器公式要用 PSC + 1 和 ARR + 1?

两个寄存器都是从 0 开始计数。PSC 为 0 表示除以 1,ARR 为 0 表示一个计数周期。直接用 PSC * ARR 会产生 off-by-one 错误。

为什么 STM32 定时器频率是预期的两倍?

许多 STM32 系列中,当 APB prescaler 大于 1 时,该 APB 总线上的 timers 会收到 2 倍 APB clock。比如 APB 为 84 MHz、prescaler 为 2 时,timer clock 可能是 168 MHz。

运行中可以修改 STM32 timer prescaler 吗?

可以,但新的 PSC 通常会被缓冲,并在 update event 后生效。强制 update event 可能重置计数器并影响中断,需要结合具体模式确认。

STM32 定时器不工作时应该检查什么?

确认 RCC clock 已开启、APB clock 与预期一致、处理了 timer clock 倍频规则、PSC/ARR 没超寄存器宽度、需要时已打开 update interrupt,并且输出引脚配置了正确 alternate function。