我用的是启明STM32F407开发板,但是没有买匹配的屏幕,当测试ADC模块时,启明给的源代码显示结果是在显示屏上,所以就在网上找了霸天虎F407的源代码代替。这样可以用霸天虎的源代码把测试结果通过串口在电脑上显示出来。
当我按照霸天虎源代码配置好数据接口和波特率时,串口数据显示的全是乱码(配置波特率为115200)。我看了代码之后找不到具体原因出在哪,上网找了之后根据网上的提示更改串口波特率,但是还是不行。当我把波特率更改到38400时,数据显示正常,但是我程序里写的波特率明明是115200!所以这其中肯定是哪里出了错误!
我对比了启明和霸天虎的开发板原理图,发现启明用的晶振是8M的,但是霸天虎用的晶振是25M的。所以这两者之间出了问题。霸天虎的频率差不多是启明的3倍。接着看源代码。打开霸天虎的system_stm32f4xx.h文件,可以查看里面的时钟配置。
在里面我找到了这么一段代码:
#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || \
defined(STM32F410xx) || defined(STM32F411xE) || defined(STM32F469_479xx)
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
我用的是F407的开发板,从代码可以看出,如果没定义HSE_VALUE,就定义HSE_VALUE的值为25000000(即25M)。而启明的这段代码是
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
这就是两者的区别,如果在8M晶振的开发板上使用25M晶振的代码,需要在25M前面添加上8M的定义代码,或者在25M的代码里面直接改动。改动完毕,编译,下载,再看串口显示正常。
初学,有不合理之处还望指出,希望大家多多指教。