STM32f407的时钟初始化
时间: 2023-07-23 21:16:42 浏览: 124
STM32系统时钟初始化函数
STM32f407的时钟初始化包括以下几个步骤:
1. 使能HSE时钟:HSE(High Speed External)是外部高速晶振,需要先使能HSE时钟。
```
RCC->CR |= RCC_CR_HSEON; // 使能HSE时钟
while(!(RCC->CR & RCC_CR_HSERDY)); // 等待HSE稳定
```
2. 配置PLL时钟:STM32f407的主频通常是通过PLL时钟倍频得到。需要选择合适的倍频系数、分频系数和PLL时钟源。
```
RCC->PLLCFGR &= ~(RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLP | RCC_PLLCFGR_PLLQ); // 清零PLL配置位
RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; // 选择HSE为PLL时钟源
RCC->PLLCFGR |= RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1; // PLL输入分频系数
RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_3 | RCC_PLLCFGR_PLLN_2 | RCC_PLLCFGR_PLLN_0; // PLL倍频系数
RCC->PLLCFGR &= ~RCC_PLLCFGR_PLLP; // PLL输出分频系数
RCC->PLLCFGR |= RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_1; // PLL时钟输出分频系数
RCC->CR |= RCC_CR_PLLON; // 使能PLL时钟
while(!(RCC->CR & RCC_CR_PLLRDY)); // 等待PLL稳定
```
3. 配置系统时钟:将PLL时钟作为系统时钟,并设置合适的AHB、APB1和APB2分频系数。
```
RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2); // 清零分频系数
RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB时钟不分频
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; // APB1时钟分频4
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; // APB2时钟分频2
RCC->CFGR |= RCC_CFGR_SW_PLL; // 选择PLL时钟作为系统时钟
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // 等待PLL时钟成为系统时钟
```
以上是STM32f407的时钟初始化步骤,需要根据具体的应用场景进行调整。注意在使用PLL时钟之前必须先使能HSE时钟,并等待HSE稳定。在修改时钟分频系数和时钟源时需要先将对应的配置位清零,再设置新的分频系数和时钟源。
阅读全文