然後使用下面的函數做為系統時鐘的初始化函數
void RCC_Configuration(void)
{
RCC_DeInit();//將外設 RCC寄存器重設為缺省值
RCC_HSICmd(ENABLE);//使能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
//設置 PLL 時鐘源及倍頻系數
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);//使能或者失能 PLL,這個參數可以取:ENABLE或者DISABLE
RCC_PLLCmd(ENABLE);//如果PLL被用於系統時鐘,那麽它不能被失能
//等待指定的 RCC 標誌位設置成功 等待PLL初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//設置系統時鐘(SYSCLK) 設置PLL為系統時鐘源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//選擇想要的系統時鐘
//等待PLL成功用作於系統時鐘的時鐘源
// 0x00:HSI 作為系統時鐘
// 0x04:HSE作為系統時鐘
// 0x08:PLL作為系統時鐘
while(RCC_GetSYSCLKSource() != 0x08);//需與被選擇的系統時鐘對應起來,RCC_SYSCLKSource_PLL
}
void RCC_Configuration(void)
{
RCC_DeInit();//將外設 RCC寄存器重設為缺省值
RCC_HSICmd(ENABLE);//使能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
//設置 PLL 時鐘源及倍頻系數
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);//使能或者失能 PLL,這個參數可以取:ENABLE或者DISABLE
RCC_PLLCmd(ENABLE);//如果PLL被用於系統時鐘,那麽它不能被失能
//等待指定的 RCC 標誌位設置成功 等待PLL初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//設置系統時鐘(SYSCLK) 設置PLL為系統時鐘源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//選擇想要的系統時鐘
//等待PLL成功用作於系統時鐘的時鐘源
// 0x00:HSI 作為系統時鐘
// 0x04:HSE作為系統時鐘
// 0x08:PLL作為系統時鐘
while(RCC_GetSYSCLKSource() != 0x08);//需與被選擇的系統時鐘對應起來,RCC_SYSCLKSource_PLL
}
補充壹點:
由圖可以看出系統時鐘的供給可以有3種方式,HSI,HSE,PLL。如果選用內部時鐘作為系統時鐘,其倍頻達不到72Mhz,最多也就8Mhz/2*16 = 64Mhz。