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

Author:AXYZdong 自动化专业 工科男

有一点思考,有一点想法,有一点理性!

定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!

CSDN@AXYZdong,CSDN首发,AXYZdong原创

唯一博客更新的地址为: 👉

3f2d688c3f5349e293bc6e7a21665169.png

开发板:stm32f407VET6

开发环境:keil5 MDK

为了使文章的内容完整,增加了一下原因的叙述,没有兴趣的话可以直接跳转到 问题解决

问题产生

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

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

百度搜索总结:

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

先排查这两个问题

1.USB转串口的问题

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

2.波特率不同步的问题

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

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

e4d93c065f9493f542d7095269aefe86.gif

外部晶振对串口的影响

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

串口外设是挂在APB总线上的,一般用于低速外设,它是AHB总线时钟分频所得。

这样设计分频是为了降低低速外设的开关损耗。

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

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

26b2aeb4eeda5796bdc0225f4c68e10c.png

问题解决

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

714c93be4b0c8acef7f7f0df013e2c92.png

▲ 博主板子上晶振是8Mhz

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

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

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

/**

* @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

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

/**

* @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 */

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

总结

对于 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

本次的分享就到这里

4c7fe68ce89fd7c97e565c6946bc6a40.gif

好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^ ❤️ ❤️ ❤️

码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉关注👈我哦!

更多精彩内容请前往 AXYZdong的博客

如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值