串口乱码问题及原因分析

串口应该是嵌入式工程师使用最多的外设之一了吧,如果在使用串口的时候遇到乱码,大家是如何处理的呢?今天给大家分享一下我遇到串口乱码问题时的思路。

1.物理连接

关于所有的通信外设,物理连接是正常通信的基础,串口多用于板间通信,注意不同设备之间需要共地,且两个设备串口的两根通信线(TX和RX)交叉连接,如果物理连接出错,也可能导致串口乱码,所以在分析串口问题之前,首先保证连接的准确性。
在这里插入图片描述

2.波特率不同

这种是一种较为基础的情况,但是即使是经验丰富的工程师也是很难避免的错误,收发方波特率不一致,必然导致乱码,这种基础的情况如果及时发现,很快能得到解决,但是如果过于粗心,可能浪费大量时间调试寻找问题,在出现乱码时,先花一点时间检查下双方的波特率是否一致,可以避免出现浪费时间调试的尴尬情况,如果调不出来请大佬来帮忙看到是这种低级问题的时候,一定要装作无事发生,避免尴尬。

3.时钟导致

串口作为异步通信方式,它发出去的或者接收到的每一个bit宽度,都是根据自身时钟来做衡量的,如果在收发两端波特率相同的情况下接收到乱码,可以尝试检查自身时钟是否有问题。

软件配置带来的时钟问题:

关于时钟问题的排查,由于串口需要用自身时钟频率来计算波特率,但是芯片是不知道自身时钟频率的,所以芯片时钟频率值都是在工程配置文件内预设的,例如ST的:
在这里插入图片描述

所以我们先要保证串口的预设时钟值和使用的时钟频率值是一致的,如果不一致,计算出来的波特率和我们想设置的波特率差别过大也会导致乱码。

时钟异常导致:

一般时钟预设值是从手册或规格书上来的,当我们保持两者一致后仍然乱码,可以考虑下是否是时钟偏差导致。如果串口时钟整体偏差较大,导致的乱码应该是大部分的通信数据异常,如果出现极个别的数据异常,也不要马上排除时钟问题,可以尝试用示波器通过脉宽触发,抓一下是否时钟波形有个别周期异常。

4.干扰导致

如果TX和RX上有干扰,也可能会导致串口的乱码,且由于干扰的不稳定性,串口乱码可能只是出现在部分数据上。可以用示波器抓一下波形,看波形上是否有毛刺。如果串口本身硬件设计有检测干扰的机制,可以通过串口状态寄存器观察是否有相应标志位置起,例如STM32F030有噪声检测标志位:
在这里插入图片描述

5.外围电路导致

很多时候,为了增强抗干扰能力,会利用串口时序,外接485电路或其他的外围电路,有的应用为了做隔离,在485上还做了光耦隔离,此类电路导致的乱码现象千奇百怪,给大家提供一个思路,用示波器抓两个点的通信波形,一个是MCU的串口输出的IO口波形,另一个是经过外围电路转换后输出的波形。
上述总结都是我碰到的串口乱码问题的原因,如果各位有奇葩的串口乱码问题,也可以在评论区分享,大家共同探讨~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值