STM32F4 TIM2/TIM3为何需将预分频值除2才能得到预期中断周期
STM32F4定时器周期异常问题解答
你遇到的TIM2、TIM3配置后周期翻倍的问题,是STM32F4系列总线时钟架构的固有设计导致的,具体说明如下:
1. 定时器的总线归属差异
STM32F4的定时器分属两条不同的APB总线,时钟源基准不同:
- 高级控制定时器(TIM1、TIM8等)挂载在
APB2总线 - 通用定时器(TIM2~TIM5等)挂载在
APB1总线
2. 定时器时钟的计算规则
STM32F4的定时器时钟并非直接等于对应APB总线的时钟,遵循以下规则:
若APBx总线的预分频系数为1,该总线挂载的定时器时钟等于APBx总线时钟;
若APBx总线的预分频系数大于1,该总线挂载的定时器时钟等于2倍APBx总线时钟。
常规168MHz系统时钟的默认配置下:
- AHB总线时钟为168MHz
- APB2总线预分频系数设为2,总线时钟为84MHz,对应定时器时钟为
2*84MHz=168MHz,和你计算时使用的基准频率一致,因此TIM1的配置完全符合预期 - APB1总线预分频系数设为4,总线时钟为42MHz,对应定时器时钟为
2*42MHz=84MHz,仅为你计算时使用的168MHz的一半,因此按168MHz推导出来的PSC值实际运行时周期会翻倍,必须将PSC减半才能得到预期的中断周期。
3. 后续配置修正建议
后续计算TIM2~TIM5这类APB1挂载的定时器参数时,直接将定时器时钟基准设为84MHz即可,无需额外对PSC做除以2的处理,对应周期(单位ms)计算公式如下:
Period = 1000 * (PSC + 1) * (ARR + 1) / 84000000
你使用GPIO翻转测试中断周期的逻辑是正确的,示波器测得的结果准确。
内容的提问来源于stack exchange,提问作者erenaud
相关产品推荐
相关产品推荐

