//初始化系统时钟
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp = 0;
MYRCC Delnit(); //复位并配置向量表
RCC->CR |= 0x00010000; //把时钟控制寄存器的第16置1来开启外部振荡器
while(!(RCC->CR >> 17)); //通过判断时钟控制器的第17位,判断外部振荡器是否就绪
RCC->CFRG = 0x00000400; //通过设置时钟配置寄存器8-10位来保证APB1时钟频率不超过36MHz
PLL -= 2; //抵消2个单元
RCC->CFGR |= PLL << 18; //设置PLL值
RCC->CFGR |= 1 << 16; //外部时钟作为PLL输入时钟
FLASH->ACR |= 0x32; //FLASH 2个延时周期
RCC->CR |= 0x01000000; //通过判断时钟控制寄存器的第24位,使能PLL
while(!(RCC->CR >> 25)); //通过判断时钟控制寄存器的第25位,判断PLL是否就绪
RCC->CFGR |= 0x00000002; //通过设置时钟配置寄存器0-1位把PLL作为系统时钟
while(temp != 0x02) //等待PLL作为系统时钟设置成功
{
temp = RCC->CFGR >> 2;
temp &= 0x03;
}
}