打印
[应用相关]

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

[复制链接]
1506|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  • 问题产生

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

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

百度搜索总结:

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

使用特权

评论回复
沙发
梅花香自123|  楼主 | 2021-9-28 23:22 | 只看该作者
先排查这两个问题
1.USB转串口的问题
解决方法: USB转串口坏了的话,换一个好的就没事了。(ps:这个出现的概率比较小)

使用特权

评论回复
板凳
梅花香自123|  楼主 | 2021-9-28 23:23 | 只看该作者
2.波特率不同步的问题
出现乱码,首先检查一下,串口助手的波特率是不是和程序设置的是一样的,如果一样的话出现乱码,参考下面的解决方法。

使用特权

评论回复
地板
梅花香自123|  楼主 | 2021-9-28 23:23 | 只看该作者
外部晶振对串口的影响
stm32的串口使用的是外部高速时钟的时钟源

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

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

使用特权

评论回复
5
梅花香自123|  楼主 | 2021-9-28 23:24 | 只看该作者
所以最终串口的波特率受高速时钟的影响。

使用特权

评论回复
6
梅花香自123|  楼主 | 2021-9-28 23:25 | 只看该作者
问题解决
首先找到自己板子上外部晶振,并确定它的大小。

使用特权

评论回复
7
梅花香自123|  楼主 | 2021-9-28 23:26 | 只看该作者

使用特权

评论回复
8
梅花香自123|  楼主 | 2021-9-28 23:27 | 只看该作者
在官方标准库中,外部时钟频率配置默认 25MHz 的晶振。

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

使用特权

评论回复
9
梅花香自123|  楼主 | 2021-9-28 23:28 | 只看该作者
找到 stm32f4xx.h ,在 .h 文件120行左右的地方,默认是这样的:
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] 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 */

使用特权

评论回复
评论
梅花香自123 2021-9-28 23:28 回复TA
▲ 默认25Mhz 
10
梅花香自123|  楼主 | 2021-9-28 23:29 | 只看该作者
下面只需定义一下自己开发板的外部时钟源频率即可:(加个宏定义)
/**
* @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 */

使用特权

评论回复
评论
梅花香自123 2021-9-28 23:29 回复TA
附:如果串口助手没有收到任何东西,请检查连接 TX 、RX 端子的杜邦线是否松动。 
11
梅花香自123|  楼主 | 2021-9-28 23:30 | 只看该作者
总结
对于 stm32 的 F1 和 F4 等系列,如果出现串口通信出现乱码的问题,都可以尝试使用上述方法解决。

自己开发板上的外部晶振要了解,如果某一总线的时钟来源于外部时钟源,自己使用的外设恰好挂靠在该总线上,利用官方标准库,一定要将 stm32f4xx.h 文件中相关配置加以修改。

使用特权

评论回复
12
heimaojingzhang| | 2021-10-13 09:45 | 只看该作者
主要是 要看看是什么原因产生的乱码

使用特权

评论回复
13
xiaoqizi| | 2021-10-13 09:48 | 只看该作者
无外乎就是那么些原因导致的

使用特权

评论回复
14
木木guainv| | 2021-10-13 09:48 | 只看该作者
这种问题一般都比较容易解决

使用特权

评论回复
15
tpgf| | 2021-10-13 12:15 | 只看该作者
有时候确实可以寻求百度的支持

使用特权

评论回复
16
keaibukelian| | 2021-10-13 12:16 | 只看该作者
步骤非常清晰明确

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1095

帖子

0

粉丝