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;
}
}