在用正点模板时,默认TIM3_CLK=84MHZ,怎么来的呢,本文解决你的疑惑。
根据STM32F4系列参考手册(RM0090)中的时钟树描述,定时器时钟(如TIM3)遵循以下规则:
-
APB1分频系数与定时器时钟关系:
- 若
APB1分频系数(PPRE1)= 1
,定时器时钟频率等于PCLK1
48。 - 若
PPRE1 ≠ 1
(如2/4/8/16),定时器时钟频率 自动倍频,即:TIM3时钟=PCLK1×2TIM3时钟=PCLK1×2该逻辑由硬件实现,无需软件干预57。
- 若
-
具体实现原理
-
时钟路径 :
plaintextCopy Code
SYSCLK → HCLK → APB1分频器 → PCLK1 → 硬件自动倍频 → TIM3时钟
当APB1分频系数为4时:PCLK1=HCLK4⇒TIM3时钟=PCLK1×2=HCLK2PCLK1=4HCLK⇒TIM3时钟=PCLK1×2=2HCLK例如,若HCLK=168MHz
,则TIM3_CLK=84MHz
。
-
验证方法
-
官方手册章节:
- 参考文档 :STM32F4xx参考手册(RM0090)的 RCC章节(Clock Configuration) 和 **通用定时器章节(General-purpose timers)**。
- 关键描述 : If the APB1 prescaler (PPRE1) is configured to a division factor of 2, 4, 8 or 16, the TIMxCLK frequency is multiplied by 2.
-
实际配置验证
-
设置
APB1分频系数=4
后,调用HAL_RCC_GetPCLK1Freq()
获取PCLK1
值,并通过公式计算TIM3时钟频率
78。
示例代码:cCopy Code
uint32_t pclk1 = HAL_RCC_GetPCLK1Freq(); // 返回42MHz(当HCLK=168MHz时) uint32_t tim3_clk = pclk1 * 2; // TIM3时钟=84MHz
-