串口出现乱码的原因其中一个就是软件程序的HSE值跟硬件的晶振值不一致。
在F4DSP标准库当中V1.4.0在stm32f4xx.h对HSE的定义如下
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
在V1.5.1中,stm32f4xx.h对HSE的定义如下
#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F411xE)
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
#elif defined(STM32F446xx)
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx || STM32F411xE */
这里使用了25兆的时钟频率,与外部的8兆不符合,所以串口通信的时候会乱码,当25兆改成8兆的时候通信会正常。
还有人认为改keil里面如下
修改这里也没有用,因为我试过,也是乱码。
其实最好的解决方法如下
就是在这里修改HSE的值,其他的不用修改,这样就可以通信正常了,修改stm32f4xx.h里面的值不是不可以,
但是感觉修改里面的东西不是很好,毕竟都是库来的,以后调用的时候也不用想着这个问题。
串口通信出现乱码总结: 1、修改stm32f4xx.h里面HSE_VALUE 的值。
2、在keil里面添加HSE_VALUE 的值进行初始化。
学到一招
一周热门 更多>