帮我配置STM32芯片系统时钟为168MHZ代码
时间: 2024-05-02 19:20:25 浏览: 103
STM32系统时钟的配置
以下是配置STM32芯片系统时钟为168MHZ的代码:
```c
#include "stm32f4xx.h"
int main(void)
{
//使能HSE时钟
RCC->CR |= RCC_CR_HSEON;
while((RCC->CR & RCC_CR_HSERDY) == 0); //等待HSE时钟稳定
//配置PLL时钟
RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; //PLL时钟源选择HSE
RCC->PLLCFGR |= (8 << RCC_PLLCFGR_PLLM_Pos); //PLL输入时钟分频系数为8
RCC->PLLCFGR |= (168 << RCC_PLLCFGR_PLLN_Pos); //PLL倍频系数为168
RCC->PLLCFGR &= ~(RCC_PLLCFGR_PLLP_Msk | RCC_PLLCFGR_PLLP_1); //PLL输出时钟分频系数为2
RCC->PLLCFGR |= RCC_PLLCFGR_PLLQ_3; //PLL时钟输出FCLK_Q分频系数为7
//使能PLL时钟
RCC->CR |= RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) == 0); //等待PLL时钟稳定
//配置FLASH读取延迟和预取指数
FLASH->ACR |= FLASH_ACR_LATENCY_5WS;
FLASH->ACR |= FLASH_ACR_PRFTEN;
//配置系统时钟为PLL时钟
RCC->CFGR |= RCC_CFGR_SW_PLL;
while((RCC->CFGR & RCC_CFGR_SWS_PLL) != RCC_CFGR_SWS_PLL); //等待系统时钟切换完成
//配置AHB时钟为168MHZ
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
//配置APB1时钟为42MHZ
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
//配置APB2时钟为84MHZ
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
//其他配置
SystemCoreClockUpdate(); //更新系统时钟变量SystemCoreClock
//其他初始化代码
while(1);
}
```
上述代码中,首先使能HSE时钟,并等待其稳定;然后配置PLL时钟,包括选择PLL时钟源、输入时钟分频、倍频系数、输出时钟分频和时钟输出FCLK_Q分频等;接着使能PLL时钟,并等待其稳定;然后配置FLASH读取延迟和预取指数;再将系统时钟切换为PLL时钟,并等待切换完成;最后根据168MHZ时钟频率配置AHB、APB1和APB2时钟分频系数,并更新系统时钟变量SystemCoreClock。
需要注意的是,上述代码只适用于STM32F4系列芯片,其他系列芯片的时钟配置可能有所不同。另外,如果需要使用外部晶体振荡器作为时钟源,需要将上述代码中的RCC_PLLCFGR_PLLSRC_HSE改为RCC_PLLCFGR_PLLSRC_HSE_PREDIV。
阅读全文