最近在使用STM32F207板子的时候,需要使用到WIFI模块功能,所以参考了下官方的例程,但是发现串口调试输出的时候没有任何反映。仔细检查了串口的引脚配置和参数配置,发现没有任何问题,于是百思不得其解,最后猛然想到了会不会是晶振的问题?
经过检测,发现的确是外部晶振的问题,导致时钟频率不一致,所以需要修改相应的内容,以使得时钟频率一致。由于我是在F2板子上配置的,和F1的配置有点不同,以下列出两种配置:
STM32F103配置
假设条件:比如官方的晶振配置是8M,而你自己的是24M
- 修改晶振值:(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 - 修改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配置
- 修改晶振值:(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 - 修改PLL倍频:(system_stm32f2xx.c 第145行)
原来是8M:
#define PLL_M 8
现在改成12M:#define PLL_M 12
重新烧录,串口信息调试输出正常,OK,问题解决了!