STM32学习:STM32时钟系统

一、时钟树介绍

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

  • HSI振荡器时钟
  • HSE振荡器时钟
  • PLL时钟

这些设备有以下两种二级时钟源:

  • 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。 RTC用于从停机/待机模式下自动唤醒系统。
  • 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。

当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
小容量、中容量和大容量产品的复位和时钟控制(RCC)

时钟树.png

SystemInit()后时钟频率大小:

  • SYSCLK(系统时钟) =72MHz
  • AHB 总线时钟(HCLK=SYSCLK) =72MHz
  • APB1 总线时钟(PCLK1=SYSCLK/2) =36MHz
  • APB2 总线时钟(PCLK2=SYSCLK/1) =72MHz
  • PLL 主时钟 =72MHz

二、时钟配置函数介绍

(一)时钟使能配置函数

RCC_HSICmd 
RCC_LSICmd 
RCC_PLLCmd 
RCC_RTCCLKCmd 
RCC_AHBPeriphClockCmd 
RCC_APBxPeriphClockCmd

(二)时钟源和分频因子相关配置函数

RCC_HSEConfig 
RCC_LSEConfig 
RCC_PLLConfig 
RCC_MCOConfig 
RCC_SYSCLKConfig 
RCC_HCLKConfig 
RCC_PCLK1Config 
RCC_PCLK2Config 
RCC_RTCCLKConfig 
RCC_ADCCLKConfig 
RCC_USBCLKConfig

(三)外设复位函数

RCC_APB1PeriphResetCmd 
RCC_APB2PeriphResetCmd

(四)状态参数获取函数

RCC_GetSYSCLKSource 
RCC_GetClocksFreq 
RCC_GetFlagStatus 
RCC_ClearFlag

(五)RCC中断相关函数

RCC_ITConfig 
RCC_ClearITPendingBit 
RCC_GetITStatus

三、系统时钟设置步骤

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作为系统时钟
 }
}

你可能感兴趣的:(STM32学习:STM32时钟系统)