1、STM32时钟配置初始化函数:
void Stm32_Clock_Init(){
unsigned char temp = 0; //定义一个无符号型的char类型的变量,变量名为temp
MYRCC_DeInit(); //复位并配置向量表,此函数是keil自动写好的,可以不用去管他
RCC->CR |= 0x00010000; //把stm32的时钟控制寄存器的第16位置1来使能外部时钟(HSE),具体说明见STM32参考手册第85页对RCC_CR寄存器的说明
while(! (RCC->CR>>17)); //判断RCC_CR寄存器的第17位,即判断外部高速时钟是否就绪
RCC->CFGR = 0x00000400; //通过设置时钟配置寄存器的第10-8为来是APB1的时钟不超过36MHz,以防止当APB1时钟超过36MHz而带来的系统紊乱
PLL-=2; //将PLL值减2来配置系统的锁相环倍频系数,具体要求见RCC_CFGR寄存器的21-18位。
RCC_CFGR |=(PLL<<18); //将减去2后的PLL值左移18位后与原RCC_CFGR值进行或运算,即将配置PLL值
RCC_CFGR|=(1<<16); //将外部时钟作为系统时钟
FLASH_ACR |= 0x32; //将FLASH延时两个周期 具体参考ST文档PM0042 programming manual《STM32F10XXX Flash Programming》
RCC_CR |=0x01000000; //使能PLL
while(!(RCC->CR>>25)); //判断使能PLL是否成功
RCC_CFGR |= 0x0000002;//将PLL输出作为系统时钟
while(temp!=0x02) { //等待PLL输出作为系统时钟设置成功
temp=RCC-CFGR>>2;
temp&=0x03;
}
}