//选择HSI作为内部时钟 void RCC_Configuration(void) { RCC_DeInit(); ????????????????????????????????????? //重设RCC寄存器为缺省值 RCC_HSICmd(ENABLE); ?????????????????????????????????? //使能HSI内部高速晶振 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); ??? //等待使能成功 //配置AHB时钟频率与系统时钟频率一致 ??? RCC_HCLKConfig(RCC_SYSCLK_Div1); ? //配置APB1低速时钟频率为AHB时钟频率的1/2 ???????????????????? RCC_PCLK1Config(RCC_HCLK_Div2); ? //配置APB2高速时钟频率与AHB时钟频率一致 ????????????????????? RCC_PCLK2Config(RCC_HCLK_Div1); ? //配置ADC时钟频率为APB2时钟频率的1/4 RCC_ADCCLKConfig(RCC_PCLK2_Div4); ????????????????????? //将内部晶振时钟2分频后作为PLL时钟源,倍频系数为10(即系统时钟为40MHz) RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10); ?? //使能PLL(如果PLL被用于系统时钟,那么它不能被失能) ??????????????? RCC_PLLCmd(ENABLE); ???? //等待指定的RCC标志位设置成功,等待PLL初始化成功 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); ? RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); ?????????????//以PLL时钟作为系统时钟源 //0x00:HSI作为系统时钟 //0x04:HSE作为系统时钟 //0x08:PLL作为系统时钟 while(RCC_GetSYSCLKSource() != 0x08); ????????? //等待PLL时钟成功作为系统时钟源 } |