STM32F407时钟系统解析
1. STM32F407时钟系统框图
时钟作为一个单片机的脉搏,有必要好好了解一下。
1.1 为什么时钟需要被分为许多频率?
在传统51单片机中,一般只有一个时钟频率,而stm32有多个分频有以下原因: - 减小功耗 - 为了增强抗干扰能力 - 为了给不同外设提供时钟
1.2 F407的时钟来源
- LS IRC:低速内部时钟(32Khz 内部RC震荡产生 可提供给:看门狗、RTC)
- LSE DSC:低速外部时钟(32.768KHz可提供给:RTC)
- HSI RC:高速内部时钟 (16MHz内部RC产生 可提供给:系统时钟、PLL)
- PLLCLK:锁相环时钟输出,分为PLL(可提供给:系统、USBOTG)与PLLI2S(可提供给:I2S(音质需求))
- HSE OSC:高速外部时钟(4-26Mhz 外接晶振 可提供给:RTC、输出引脚(PA8(MCO1),PC9(MCO2)))
提供给PLLCLK的时钟可能来源如下: - HSI - HSE
提供给系统的时钟可能来源如下: - HSI - HSE - PLLCLK
MCO1的可能来源 - HIS - LSE - HSE - PLL
MCO2的可能来源 - HSE - PLL - SYSCLK - PLLI2S
如何计算PLLCLK:
无论HSI或HSE作为PLLCLK时钟来源,都首先经过/M的分频 如图然后经过xN、/p 输出PLLCLK即如下公式(\(f\)为HSI或HSE输入):
\[ PLLCLK = \frac{f}{M} \times \frac{N}{P} \]
若使用8Mhz外部时钟则系统运行频率:
\[ PLLCLK = \frac{8Mhz}{8} \times \frac{336}{2} = 168(Mhz) \]
1.3系统时钟的去向
SYSCLOCK去向: - 以太网RTP时钟 - AHBPRESC - APBPRESC(APB1、APB2)在AHB分频之后
2.F4固件库中SystemInit()时钟系统初始化函数
调用时机:在系统复位之后,在执行main函数之前。
基本为RCC寄存器的配置,如:使能时钟源、读取就绪状态、重置寄存器、关闭所有系统中断、启动CSS时钟安全寄存器。
2.1 初始化之后的状态
- SYSCLOCK:168Mhz
- AHB:168Mhz
- APB1:42Mhz
- APB2:84Mhz
- PLL:168Mhz
初始化之后若需要获取系统频率,可以访问SystemCoreClock变量来得到
STM32F407时钟系统解析
http://jiangno.com/2024/11/29/24_11_29_STM32F407Clock/