前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【STM32】串口通信出现乱码(使用官方标准库)

【STM32】串口通信出现乱码(使用官方标准库)

作者头像
AXYZdong
发布2020-10-29 09:46:48
4.1K0
发布2020-10-29 09:46:48
举报
文章被收录于专栏:想到什么就分享
  • 开发板:stm32f407VET6
  • 开发环境:keil5 MDK
  • 为了使文章的内容完整,增加了一下原因的叙述,没有兴趣的话可以直接跳转到 问题解决
  • 问题产生

最近学习了一下32的串口通信,串口配置还是很简单的,不过后面串口调试助手上面出现的乱码。很让人头疼。

当然第一时间去百度寻求解决办法。

百度搜索总结:

  • 在程序不出现问题的情况下,一定是外部晶振设置的问题。但是也要排查下面 ? 两个问题

先排查这两个问题

1.USB转串口的问题

  • 解决方法: USB转串口坏了的话,换一个好的就没事了。(ps:这个出现的概率比较小)

2.波特率不同步的问题

  • 出现乱码,首先检查一下,串口助手的波特率是不是和程序设置的是一样的,如果一样的话出现乱码,参考下面的解决方法。

插播一条反爬虫信息,读者可以忽略:

在这里插入图片描述
在这里插入图片描述
  • 外部晶振对串口的影响

stm32的串口使用的是外部高速时钟的时钟源

串口外设是挂在APB总线上的,一般用于低速外设,它是AHB总线时钟分频所得。 这样设计分频是为了降低低速外设的开关损耗。

然而AHB总线的时钟又源自于高速时钟源。高速时钟源可以是高速内部时钟、高速外部时钟、高速内部或外部时钟PLL倍频所得。

所以最终串口的波特率受高速时钟的影响。

在这里插入图片描述
在这里插入图片描述
  • 问题解决

首先找到自己板子上外部晶振,并确定它的大小。

在这里插入图片描述
在这里插入图片描述

▲ 博主板子上晶振是8Mhz

在官方标准库中,外部时钟频率配置默认 25MHz 的晶振。

而我们需要将外部时钟频率配置成适合自己板子的

找到 stm32f4xx.h ,在 .h 文件120行左右的地方,默认是这样的:

代码语言:javascript
复制
/**
 * @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, you
        can define the HSE value in your toolchain compiler preprocessor.
  */    
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  
#endif /* HSE_VALUE */

▲ 默认25Mhz

下面只需定义一下自己开发板的外部时钟源频率即可:(加个宏定义

代码语言:javascript
复制
/**
 * @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, you
        can define the HSE value in your toolchain compiler preprocessor.
  */    
	
#define HSE_VALUE   ((uint32_t)8000000)    // 定义自己开发版上的外部时钟源频率
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  
#endif /* HSE_VALUE */

附:如果串口助手没有收到任何东西,请检查连接 TXRX 端子的杜邦线是否松动。

  • 总结
  • 对于 stm32 的 F1 和 F4 等系列,如果出现串口通信出现乱码的问题,都可以尝试使用上述方法解决。
  • 自己开发板上的外部晶振要了解,如果某一总线的时钟来源于外部时钟源,自己使用的外设恰好挂靠在该总线上,利用官方标准库,一定要将 stm32f4xx.h 文件中相关配置加以修改。

【参考文献】 [1]:https://blog.csdn.net/qq_34179721/article/details/97427395?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先排查这两个问题
    • 1.USB转串口的问题
      • 2.波特率不同步的问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档