cathy 在 提交
最近刚开始接触STM32,因为项目中所使用的STM32没有外部晶振,再加上需要使用一些高频外设,所以说就只能使用内部的HSI作为PLL时钟源,作为系统时钟。下图为STM32F10时钟系统框图以及相应说明:
下面为我参考STM32相应资料所写的系统时钟的初始化函数:
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时钟成功作为系统时钟源 }
最后补充:从STM32F10时钟系统框图及说明这个图中你可以看出,系统时钟的选择有三种,分别为HSI、HSE和PLL。如果选择了以HSI为PLL时钟源的PLL为系统时钟,频率是达不到72MHz的,最多就是 8MHz/2*16 = 64MHz。但是实际上,由于HSI内部RC振荡器精度不是很高,再加上也不是很稳定,所以建议如果选择PLL为系统时钟,且PLL时钟源为HSI,建议系统时钟设置不要超过50MHz。
————————————————
版权声明:本文为CSDN博主「bai_tao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bai_tao/article/details/90728758
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。