1.将RCC寄存器重新设置为默认值 RCC_DeInit
2.打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3.等待外部高速时钟晶振工作 HSEStartUpStatus =RCC_WaitForHSEStartUp();
4.设置AHB时钟 RCC_HCLKConfig;
5.设置高速APB2时钟 RCC_PCLK2Config;
6.设置低速APB1时钟 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()
在STM32中有5个时钟源:
①、HSI是高速内部时钟,RC震荡器,频率为 8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HIS/2、HSE或HSE/2。倍频可选择为2~16倍,但其输出频率最大不得超过72MHz。
系统时钟SYSCLK,它是供STM32中绝大部分器件工作的时钟源,系统时钟可选择为PLL输出、HSI或者HSE。系统时钟的做大频率为72MHz,它通过AHB分频器分频后送给个模块使用,AHB分频器可选择1、2、4、8、16、32、64、128、256、512分频。AHB分频器输出的时钟送给5大模块使用:
1. 送给AHB总线、内核、内存和DMA使用的HCLK时钟。
2. 通过8分频后送给Cortex的系统定时器时钟。
3. 直接送给Cortex的空闲运行时钟PCLK。
4. 送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。
该倍频器可选择
1
或者
2
倍频,时钟输出供定时器
2
、
3
、
4
使用。
5.
送给
APB2
分频器。
APB2
分频器可选择
1
、
2
、
4
、
8
、
16
分频,其输出一路供
APB2
外设使用
(PCLK2
,最大频率
72MHz)
,另一路送给定时器
(Timer)1
倍频器使用。该倍频器可选择
1
或者
2
倍频,时钟输出供定时器
1
使用。另外,
APB2
分频器还有一路输出供
ADC
分频器使用,分频后送给
ADC
模块使用。
ADC
分频器可选择为
2
、
4
、
6
、
8
分频。
连接在
APB1
(低速外设)上的设备有:电源接口、备份接口、
CAN
、
USB
、
I2C1
、
I2C2
、
UART2
、
UART3
、
SPI2
、窗口看门狗、
Timer2
、
Timer3
、
Timer4
。
连接在
APB2
(高速外设)上的设备有:
UART1
、
SPI1
、
Timer1
、
ADC1
、
ADC2
、所有普通
IO
口、第二功能
IO
口。