野火开发版兼容性问题)"/>
STM32F407串口乱码(正点原子与野火开发版兼容性问题)
设备信息
我使用的开发板是正点原子的stm32f407探索者开发板 ,使用的固件库以及程序是从野火资料下载中心下载的,使用串口查看数据的时候,上位机接收到的数据显示总是乱码,具体如下图所示。
解决方案
每一款单片机都有自己的时钟源,存在外部高速时钟(HSE)和外部低速时钟(LSE),而单片机中的系统时钟最大值为168Mhz,一般都是由外部高速时钟提供,然后经过内部锁相环吧频率升上去。
外部高速晶振如图,正点原子探索者为8M,而野火的霸天虎为25Mhz,两款时钟源不同,因此直接复制的话,会使得,内部时钟混乱。因此出现串口乱码的情况,因此改串口或者该系统时钟源都可以。
在这里我用的是配置系统时钟源,是其最后都达到168Mhz。
正点原子及8M HSE开发版时钟配置
野火霸天虎25MHZ开发版时钟配置
可以看出二者在一些系统寄存器的配置上不都一样
解决办法
1、 PLL_M
全局搜索“#define PLL_M ”——在system_stm32f4xx.c文件中
/************************* PLL Parameters *************************************/
#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx)
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 8
#else /* STM32F411xE */
#if defined (USE_HSE_BYPASS)
#define PLL_M 8
#else /* STM32F411xE */
#define PLL_M 16
#endif /* USE_HSE_BYPASS */
#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */
2 、HSE_VALUE
当前项目搜索“#define HSE_VALUE”——在stm32f4xx.h文件中,确保HSE_VALUE的值与板子上的晶振保持一致。如晶振是25MHz,HSE_VALUE=25000000;晶振是8MHz,HSE_VALUE=8000000。
#if defined (USE_HSE_BYPASS)
#define HSE_BYPASS_INPUT_FREQUENCY 8000000
#endif /* USE_HSE_BYPASS */
如果不一样的话,就不能用了
将正点原子或是野火写的system.stm32f4xx.c整个相应的替换
将正点原子或是野火写的system.stm32f4xx.c整个相应的替换
将正点原子或是野火写的system.stm32f4xx.c整个相应的替换
不要自己改,因为时钟配置很复杂,新手不要尝试自己改。
3.如果替换的话还是不行,需要改stm32f4xx.h
这是因为系统时钟配置的问题,搜索HSE_VALUE,将HSE_VALUE的值改为板子对应的值。
/*** @brief In the following line adjust the value of External High Speed oscillator (HSE)used in your application Tip: To avoid modifying this file each time you need to use different HSE, youcan define the HSE value in your toolchain compiler preprocessor.*/ #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */#endif /* HSE_VALUE *//*** @brief In the following line adjust the External High Speed oscillator (HSE) Startup Timeout value */
将25000000改为8000000即可,这次就可以用了
亲测有效,谢谢支持
更多推荐
STM32F407串口乱码(正点原子与野火开发版兼容性问题)
发布评论