STM32 时钟源和RCC 配置

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 延时为两个周期,这里的延时周期与选定的主频有关;
关系如下:
STM32 时钟源和RCC 配置_第1张图片

你可能感兴趣的:(STM32系列)