HSI是8MRC震荡电路,精度1%。
HSI + PLL 最高为64M(HSI / 2 * 16)
RCC_DeInit();//将外设 RCC寄存器重设为缺省值
RCC_HSICmd(ENABLE);//使能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能或者失能预取指缓存(参数里是使能) -----加上这两句才能到64M
FLASH_SetLatency(FLASH_Latency_2); //设置代码延时值(参数里的是指2延时周期)
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟 HCLK = SYSCLK/1
RCC_PCLK1Config(RCC_HCLK_Div4); //设置低速速AHB时钟 -----这里频率是48/4 = 12M 定时器2~7频率是24M
RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟 -----这里频率是48/1 = 48M
//设置 PLL 时钟源及倍频系数
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE
RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
//等待指定的 RCC 标志位设置成功 等待PLL初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//设置系统时钟(SYSCLK) 设置PLL为系统时钟源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟
//等待PLL成功用作于系统时钟的时钟源
// 0x00:HSI 作为系统时钟
// 0x04:HSE作为系统时钟
// 0x08:PLL作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL
查询设置的时钟频率,在主函数中使用
RCC_ClocksTypeDef RCC_Clocks; //时钟频率结构体
RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率
printf("SYSCLK_Frequency is %d \r\n",RCC_Clocks.SYSCLK_Frequency); //SYSCLK_Frequency is 48000000
printf("HCLK_Frequency is %d \r\n",RCC_Clocks.HCLK_Frequency); //HCLK_Frequency is 48000000
printf("PCLK1_Frequency is %d \r\n",RCC_Clocks.PCLK1_Frequency); //PCLK1_Frequency is 12000000
printf("PCLK2_Frequency is %d \r\n",RCC_Clocks.PCLK2_Frequency); //PCLK2_Frequency is 48000000
printf("ADCCLK_Frequency is %d \r\n",RCC_Clocks.ADCCLK_Frequency); //ADCCLK_Frequency is 24000000