STM32外部晶振时钟配置

 

最近在使用STM32F207板子的时候,需要使用到WIFI模块功能,所以参考了下官方的例程,但是发现串口调试输出的时候没有任何反映。仔细检查了串口的引脚配置和参数配置,发现没有任何问题,于是百思不得其解,最后猛然想到了会不会是晶振的问题?

经过检测,发现的确是外部晶振的问题,导致时钟频率不一致,所以需要修改相应的内容,以使得时钟频率一致。由于我是在F2板子上配置的,和F1的配置有点不同,以下列出两种配置:

STM32F103配置

假设条件:比如官方的晶振配置是8M,而你自己的是24M

  1. 修改晶振值:(stm32f10x.h中修改 第120行) 原来是8M: #define HSE_Value ((uint32_t)8000000) //< Value of the External oscillator in Hz 现在修改成12M: #define HSE_Value ((uint32_t)12000000) //< Value of the External oscillator in Hz
  2. 修改PLL倍频:(system_stm32f10fx.c 第1056行) 原来是8M: RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//89=72 现在修改成12M: RCC->CFGR |=(uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);//126=72 库函数:void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); 例子:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);

STM32F207配置

  1. 修改晶振值:(stm32f10x.h中修改 第97行) 原来是8M: #define HSE_Value ((uint32_t)8000000) //< Value of the External oscillator in Hz 现在修改成12M: #define HSE_Value ((uint32_t)12000000) //< Value of the External oscillator in Hz
  2. 修改PLL倍频:(system_stm32f2xx.c 第145行) 原来是8M:#define PLL_M 8 现在改成12M:#define PLL_M 12

重新烧录,串口信息调试输出正常,OK,问题解决了!