在给GD32配置定时器做软定时器时遇到定时器时钟速度的疑问
在调试中可以通过以下代码知道各个总线的时钟速度
RCC_ClocksTypeDef Rcc_Clock;
RCC_GetClocksFreq(&Rcc_Clock);
其中
名称 | 解释 |
---|---|
SYSCLK_Frequency | 系统时钟 |
HCLK_Frequency | 时钟树中连接SYSCLK,AHB |
PCLK1_Frequency | APB1 |
PCLK2_Frequency | APB2 |
ADCCLK_Frequency | ADC |
在下图中可以看到APB1最大速度为54Mhz,STM32的为36Mhz(图在最后),为AHB的一半。为什么配置定时器时APB1的定时器时钟速度为72Mhz呢?在标准库函数中系统时钟初始化时
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
也就是对AHB时钟总线除以了2,也就是36Mhz。在GD32手册第79页(GD32F103中文手册)标注了如下图表示。分频系数不为1,我们使用了2,所以APB1_TIMER的时钟速度×2。
所以APB1的定时器时钟要乘2。STM32的框图与GD32的大致相同,(APB1 prescale = 1) × 1 else × 2。那么就是72Mhz了。
STM32中文手册截取