定时器 计算器
STM32 定时器计算器
计算 PSC/ARR 值、实际定时器频率、误差,并处理 APB 定时器时钟倍频规则。
STM32 PSC 与 ARR 计算器
根据 APB clock、APB prescaler、目标频率和寄存器限制计算定时器寄存器值。
- 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。