两个开发板之间的波特率调整问题

  我用的是启明STM32F407开发板,但是没有买匹配的屏幕,当测试ADC模块时,启明给的源代码显示结果是在显示屏上,所以就在网上找了霸天虎F407的源代码代替。这样可以用霸天虎的源代码把测试结果通过串口在电脑上显示出来。

  当我按照霸天虎源代码配置好数据接口和波特率时,串口数据显示的全是乱码(配置波特率为115200)。我看了代码之后找不到具体原因出在哪,上网找了之后根据网上的提示更改串口波特率,但是还是不行。当我把波特率更改到38400时,数据显示正常,但是我程序里写的波特率明明是115200!所以这其中肯定是哪里出了错误!

  我对比了启明和霸天虎的开发板原理图,发现启明用的晶振是8M的,但是霸天虎用的晶振是25M的。所以这两者之间出了问题。霸天虎的频率差不多是启明的3倍。接着看源代码。打开霸天虎的system_stm32f4xx.h文件,可以查看里面的时钟配置。

system_stm32f4xx.h
位于\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include中,是片上外设接入层系统头文件。主要是申明设置系统及总线时钟相关的函数。
与其对应的源文件 system_stm32f4xx.c
在\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates中可找到,这个里面有一个非常重要的 SystemInit()函数申明,这个函数在我们系统启动的时候都会调用,用来设置系统的整个系统和总线时钟。

在里面我找到了这么一段代码:

#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的代码里面直接改动。改动完毕,编译,下载,再看串口显示正常。

 

初学,有不合理之处还望指出,希望大家多多指教。

 

posted @ 2017-10-27 17:10  追逐光的风影  阅读(448)  评论(1编辑  收藏  举报