小猫爪:这些年遇过的Bug2-STM32 UART输出乱码

本文记录了一位工程师在使用STM32F103C8T6进行UART通信时遇到的问题。当波特率从9600提升到115200,第一个字符出现乱码。经过排查,发现是USB转485隔离模块与应用中485隔离芯片的组合导致的异常。更换USB转485模块后问题解决,提醒开发者要关注硬件隔离设备可能带来的影响,并相信自己的代码。
摘要由CSDN通过智能技术生成

小猫爪:这些年遇过的Bug2-STM32 UART输出乱码

1 背景

芯片型号:STM32F103C8T6
应用类型:普通UART应用
错误现象:配置9600波特率正常,当配置115200时出现第一个字符乱码

2 场景描述

使用STM32的USART1做一个简单的RS485应用时,使用了内部8M时钟,经过PLL倍频到48M(倍频到64M后,芯片会出现死机现象,无解),然后经过1分频后给AHB2提供时钟,因为USART1是属于AHB2的外设。后使用USART1,先是配置USART1的波特率为9600,收发正常,后又将比特率设置为115200,这时候在串口助手上接收的第一个字节出现乱码现象,且出现跳动,这时就非常无解。

3 分析原因

UART波特率出现乱码的原因其实很简单就能推算出来:
①时钟配置错误
②波特率寄存器配置错误
③一些硬件问题

根据上面的三个方向,我就开始了漫长的推断,一开始我以为是因为使用了内部时钟的问题或者波特率设置的问题,导致了不稳定,但是又很快被我pass了,如果是时钟或者配置的问题,那为什么只有第一个字节出现了问题,其他字节却非常稳定呢,这就非常诡异,后来我又把问题锁定在了第三个问题,于是我抓了一下波形,结果波形稳如狗,雷打不动的那种稳,what fuck!!!

4 解决方案

研究了一下午,我快对自己的代码还有芯片产生怀疑了,就在这时,有人注意到了我的USB转485模块是那种有隔离的功能,所以就怀疑是不是这个玩意的隔离响应不行,后来就将这个USB转485换成普通的,结果完美。。。What Fuck!!!这个USB转485模块我以前用了很久,没有问题啊,怎么突然就出问题了,这是怎么回事呢。。。后来。。。我们又注意到了我们的应用上也使用了485隔离芯片,真相若隐若现。。。

盲猜:两个隔离模块加在一起出现了不可估计的影响,具体是怎么影响的,就没有过多去追究了。

教训:作为一个合格的程序员请相信自己的代码!!!

END

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值