STM32时钟系统

1.时钟树介绍

SystemInit()后时钟频率大小:
SYSCLK(系统时钟) =72MHz
AHB 总线时钟(HCLK=SYSCLK) =72MHz
APB1 总线时钟(PCLK1=SYSCLK/2) =36MHz
APB2 总线时钟(PCLK2=SYSCLK/1) =72MHz
PLL 主时钟 =72MHz

2.时钟配置函数介绍

  (1)时钟使能配置函数:

    RCC_HSICmd
    RCC_LSICmd
    RCC_PLLCmd
    RCC_RTCCLKCmd
    RCC_AHBPeriphClockCmd
    RCC_APBxPeriphClockCmd

  (2)时钟源和分频因子相关配置函数:
     RCC_HSEConfig
     RCC_LSEConfig
     RCC_PLLConfig
     RCC_MCOConfig
     RCC_SYSCLKConfig
     RCC_HCLKConfig
     RCC_PCLK1Config
     RCC_PCLK2Config
     RCC_RTCCLKConfig
     RCC_ADCCLKConfig
     RCC_USBCLKConfig 

  (3)外设复位函数:
     RCC_APB1PeriphResetCmd
     RCC_APB2PeriphResetCmd

  (4)状态参数获取函数:
    RCC_GetSYSCLKSource
    RCC_GetClocksFreq
    RCC_GetFlagStatus
    RCC_ClearFlag

  (5)RCC中断相关函数:
    RCC_ITConfig
    RCC_ClearITPendingBit
    RCC_GetITStatus

3.系统时钟设置步骤:

void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟)
{
	RCC_DeInit(); //将外设RCC寄存器重设为缺省值
	RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE)
	if(RCC_WaitForHSEStartUp()==SUCCESS) //等待HSE起振
	{
		RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
		RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
		RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
		RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数
		RCC_PLLCmd(ENABLE); //使能或者失能PLL
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位设置与否,PLL就绪
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟(SYSCLK)
		while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08:PLL作为系统时钟
	}
}
时钟配置寄存器(RCC_CFGR)
 位3:2   SWS[1:0]:系统时钟切换状态 (System clock switch status)
    由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。
    00:HSI作为系统时钟;
    01:HSE作为系统时钟;
    10:PLL输出作为系统时钟;
    11:不可用。
原文地址:https://www.cnblogs.com/DXGG-Bond/p/11801994.html