时钟理论
-
任何外设的工作都需要时钟。不分配时钟系统无法工作。时钟是STM32单片机的驱动源,使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。
-
HSE时钟——高速外部时钟,一般进去8M然后乘以9倍频得到72M的频率、HSI——高速内部时钟、PLLCLK(锁相环时钟)->72M。一般选择锁相环时钟作为系统的时钟。
-
一般系统的时钟来源是:HSE、HSI、PLL,这三个时钟由sw位来切换,(sw位写如相关的数值切换时钟来源)HSI:00, HSEA:01, PLL:10。最后读取sws位是否置1来确认时钟切换是否完成。
-
STM32单片机的时钟可以由以下3个时钟源提供:
1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差
2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟
3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用
stm32单片机的将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。
系统开始的时候要配置 1.AHB系统时钟 2. APB1 3. APB2 总共三个时钟,其中的APB1和APB2总线上有许多外设,再根据需要打开所需外设的时钟。(APB1的频率最大为32M所以AHB的时钟72M进去需哟选择2分频分到32M工作,而APB2就不用考虑,他可接受72M的时钟频率)具体时钟配置里程流程如下。
设置时钟流程:
1、将RCC寄存器重新设置为默认值 RCC_DeInit
2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置AHB时钟 RCC_HCLKConfig
5、设置高速AHB时钟 RCC_PCLK2Config
6、设置低速速AHB时钟 RCC_PCLK1Config
7、设置PLL RCC_PLLConfig
8、打开PLL RCC_PLLCmd(ENABLE);
9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
10、设置系统时钟 RCC_SYSCLKConfig
11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource()!= 0x08)
12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()
- 时钟安全系统CSS——被启用的时候可以在紧急时刻切换时钟(例如从HSE切换到HSI,但是HSI最高只有64M,可能会导致有些外设不能工作)