STM32一共有5個時鐘源,分別是HSI HSE LSI LSE PLL
①HSI 是高速內部時鐘, RC 振盪器,頻率爲 8MHz ;
②HSE 是高速外部時鐘,可接石英 / 陶瓷諧振器,或者接外部時鐘源,頻率範圍是 4MHz – 16MHz(一般接8M) ;
③LSI 是低速內部時鐘, RC 振盪器,頻率爲 40KHz ;
④LSE 是低速外部時鐘,接頻率爲 32.768KHz 的石英晶體;
⑤PLL 爲鎖相環倍頻輸出,嚴格的來說並不算一個獨立的時鐘源, PLL 的輸入可以接 HSI/2 、 HSE 或者 HSE/2 。PLL倍頻可選擇爲 2 – 16 倍,但是其輸出頻率最大不得超過 72MHz 。
其中, 40kHz 的 LSI 供獨立看門狗 IWDG 使用,另外它還可以被選擇爲實時時鐘 RTC 的時鐘源。另外,實時時鐘 RTC 的時鐘源還可以選擇 LSE ,或者是 HSE 的 128 分頻。
這裏介紹RCC 常用配置代碼
void rcc_config(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); /* RCC defualt config */
RCC_HSEConfig(RCC_HSE_ON); /* open HSE */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* wait */
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2); /* set FLASH delay */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /*set HSE as PLL clock,72MHz*/
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
}
}
此處的開發板爲外接8MHZ 晶振,按照上面代碼配置完後主頻爲72MHZ, APB1爲36MHZ,APB2爲72MHZ ,FLASH 延時爲兩個週期,這裏的延時週期與選定的主頻有關;
關係如下: