STM32中APB1外设时钟与定时器时钟区别及TIM2时钟源疑问
STM32F401 APB1时钟与TIM2时钟问题解答
两类APB1时钟的核心差异
- APB1外设时钟也就是常说的
PCLK1,是APB1预分频器的直接输出,供给APB1总线上的非定时器外设(比如I2C、USART2/3、SPI2/3这类),STM32F401上这路时钟最高不能超过42MHz,超过额定值普通外设就会工作异常。 - APB1定时器时钟是APB1为挂接的定时器单独预留的时钟路径,并非独立于PCLK1的全新时钟源,二者根上都来自AHB总线时钟。芯片做了固定硬连线逻辑:当APB1预分频系数等于1时,定时器时钟和PCLK1频率完全一致;当APB1预分频系数大于1时,定时器时钟会自动倍频为PCLK1的2倍,最高可以跑到84MHz,和系统主频同速。
- 之所以拆分两路路径,本质是性能和兼容性的折中:普通APB1外设最高支持的工作频率低,跑不了太快,但定时器对计数分辨率、最高计数频率要求更高,单独给定时器加倍频路径,不用拉高整个APB1总线的频率到超出普通外设的上限,就能让定时器跑在更高频率下,不会浪费硬件性能。不存在“一路完全没经过分频、另一路单独做预分频”的情况,只是两条路径的倍频逻辑有差异而已。
TIM2的实际工作时钟来源
- TIM2作为APB1总线上挂接的通用定时器,工作时钟完全来自APB1定时器时钟路径,不会直接使用APB1外设时钟
PCLK1。 - 实际计算TIM2定时周期的时候按规则算就不会出错:比如你配置AHB时钟为84MHz,APB1预分频设为4分频,那PCLK1就是21MHz,因为预分频系数大于1,TIM2的实际输入时钟就是21*2=42MHz;如果APB1预分频设为1分频,PCLK1跑42MHz,那TIM2的输入时钟就是42MHz,不会触发倍频。
- 你在时钟配置工具里看到两个独立的APB1时钟显示项,就是为了直接标出普通外设和定时器分别拿到的实际时钟频率,避免配置定时器预分频值、自动重装值的时候算错周期。
踩坑提醒:配定时器的时候别直接拿PCLK1的值算周期,一定要先确认APB1预分频系数,按倍频规则算出TIM2的实际输入时钟再算参数,很多新手第一次配STM32定时器都在这栽过,最后出来的定时时间差一倍。
内容的提问来源于stack exchange,提问作者mamo
相关产品推荐
相关产品推荐

