1.首先要配置好系統(tǒng)的時鐘如下:
RCC_DeInit();//將外設(shè)RCC寄存器重設(shè)為缺省值
/*EnableHSE*/
RCC_HSEConfig(RCC_HSE_ON);//設(shè)置外部高速晶振(HSE)
/*WaittillHSEisready*/
HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待HSE起振,等待外部的時鐘起振
if(HSEStartUpStatus==SUCCESS)
{
/*EnablePrefetchBuffer*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能或者失能預(yù)取指緩存
/*Flash2waitstate*/
FLASH_SetLatency(FLASH_Latency_2);//設(shè)置代碼延時值
/*HCLK=SYSCLK*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);//設(shè)置AHB時鐘(HCLK)
/*PCLK2=HCLK*/
RCC_PCLK2Config(RCC_HCLK_Div1);//設(shè)置高速AHB時鐘(PCLK2)toAPB2
/*PCLK1=HCLK/2*/
//stm32的時鐘比較復(fù)雜
RCC_PCLK1Config(RCC_HCLK_Div2);//設(shè)置高速AHB時鐘(PCLK1)toAPB1
/*ADCCLK=PCLK2/8*/
RCC_ADCCLKConfig(RCC_PCLK2_Div8);//設(shè)置ADC時鐘(ADCCLK)
/*PLLCLK=8MHz*9=72MHz*/
//設(shè)置外部時鐘源,且PLL等于外部時鐘頻率*9
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
//此時PLLCLK=72MHz,這個得知道他的值,因為USB的時鐘USBCLK=PLLCLK/1或者PLLCLK/1.5,但得確保USBCLK=48MHz
//所以配置USBCLK的時候選擇是1.5分頻
RCC_PLLCmd(ENABLE);//最后才激活PLL,必須最后才激活!
/*WaittillPLLisready*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置SYSCLK
/*WaittillPLLisusedassystemclocksource*/
while(RCC_GetSYSCLKSource()!=0x08)
{
}
}
else
{
/*IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.
Usercanaddheresomecodetodealwiththiserror*/
/*Gotoinfiniteloop*/
while(1)
{
}
}
voidUSBclock_Config()
{
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);//1.5分頻
/*EnabletheUSBclock*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB,ENABLE);//此處是激活USB外設(shè),USB屬于APB1外設(shè)
}