stm RCC demo
void Rcc_Init(void)
{
RCC_ClocksTypeDef RCC_Clocks;
ErrorStatus HSEStartUpStatus;
RCC_ClockSecuritySystemCmd(ENABLE);
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(ENABLE);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLKConfig(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSE,RCC_PLLMul_6);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_GetClocksFreq(&RCC_Clocks);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
}
RCC_ClocksTypeDef RCC_Clocks;:定义了一个结构体变量RCC_Clocks,用于存储时钟配置信息。
ErrorStatus HSEStartUpStatus;:定义了一个变量HSEStartUpStatus,用于存储HSE(高速外部时钟)启动状态。
RCC_ClockSecuritySystemCmd(ENABLE);:启用时钟安全系统。
RCC_HSEConfig(RCC_HSE_ON);:配置外部高速时钟(HSE)为开启状态。
HSEStartUpStatus = RCC_WaitForHSEStartUp();:等待外部高速时钟启动完成,并将启动状态保存到HSEStartUpStatus中。
if(HSEStartUpStatus == SUCCESS):检查外部高速时钟启动是否成功。
如果外部高速时钟启动成功:
FLASH_PrefetchBufferCmd(ENABLE);:使能闪存预取缓冲。
RCC_HCLKConfig(RCC_SYSCLK_Div1);:配置AHB总线时钟(HCLK)为系统时钟(SYSCLK)不分频。
RCC_PCLKConfig(RCC_HCLK_Div1);:配置APB总线时钟(PCLK)为AHB总线时钟(HCLK)不分频。
RCC_PLLConfig(RCC_PLLSource_HSE,RCC_PLLMul_6);:配置PLL时钟源为HSE,倍频系数为6。
RCC_PLLCmd(ENABLE);:使能PLL。
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET):等待PLL稳定。
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);:配置系统时钟源为PLL时钟。
RCC_GetClocksFreq(&RCC_Clocks);:获取时钟频率信息并保存到RCC_Clocks中。
while(RCC_GetSYSCLKSource() != 0x08):等待系统时钟源切换到PLL时钟。