在 STM32 中,有五个时钟源,为 HSI、 HSE、 LSI、 LSE、 PLL。 从时钟频率来分可以分为高速时钟源和低速时钟源,在这 5 个中 HIS, HSE 以及 PLL 是高速时钟, LSI 和 LSE 是低速时钟。
从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中 HSE 和 LSE 是外部时源,其他的是内部时钟源
对于上图的具体解释请参考STM32开发手册库函数版本4.3章节
下来就是如何对其进行配置了,第一:在系统上电之后,会采用内部时钟作为系统时钟(参考STM32中文参考手册6.26)
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit(); // 对向量中断表的一些设置
RCC->CR|=0x00010000; // 外部时钟使能: 具体参考时钟控制寄存器RCC_CR
while(!(RCC->CR>>17));//
RCC->CFGR=0X00000400; // 对APB1进行分频 具体参考STM32中文参考手册6.3.2 时钟配置寄存器(RCC_CFGR)
PLL-=2; //
RCC->CFGR|=PLL<<18; //
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//
RCC->CFGR|=0x00000002;//PLL 确定PLL作为系统时钟 至于为什么要对APB1进行分频还暂不了解(APB1是片上外设(例如I/O口)的时钟控制器)
while(temp!=0x02) //
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
这段程序对系统时钟进行初始化。具体参照时钟树及时钟的几个寄存器