串口调试小节之四 常见问题总结

5.1不通讯或者通讯错误:

此部分针对的是linux调试的情况,windows请酌情参考。

现象:出现不通讯或者通讯数据错误,接收方和发送方的数据差别比较大。

解决办法:1、检查硬件:首先将串口重新插拔一次,看是否正常,在现场出现了一次;其次是检查硬件连线,422连线方式如果rx+rx-连接反了也会出现这种情况,232不存在这种情况,所以需要检查下线路。

还有232的传输距离比较短,如果使用232通讯,需要检查线路是否太长,波特率是否太高,导致有问题。另外不同的串口芯片支持的最高波特率不同,例如就得16550A支持的最高波特率可能是115200(看硬件新旧),需要注意。

          2、检查应用程序:首先就是波特率,波特率错误一般都会导致这个问题,尤其是初学者,很可能是波特率参数写错了,比如B2400写成了2400,其次检查奇校验和偶校验还有停止位,这部分在新老部分硬件通讯时容易出问题,新硬件一般都有自适应功能,即使设置错误了也能纠正过来,但是老硬件就不具备,一般一方能收正确,但是另一方接收不正确有可能是这个原因。

5.2 串口丢数

现象:发送方发送一串数据,接收方总是会丢几个数据,并且数据可能有规率

解决办法:串口丢数一般都是串口设置的有问题,比如软件流控制,会使得1719无法抵达应用层,0xa0xd也可以作为协议层的特殊字符使用,如果0xa0xd无法收到,则考虑INLCRICRNLIGNCR标识是否有正确设置。所以首先看丢数是否有规律,在ASCII码表里面是多少,有什么特殊作用,在对应串口参数设置查询比对是哪个一个没有设置正确。

第二种可能是数据校验出错了,校验出错也有两种处理,丢弃或者补0,这部分也要正确设置。从现场测试来看,12个小时连续发数,每2s300字节左右,出现1次存在问题,串口出错也是比较低的。

5.3 串口多数

现象:接收方数据接收的总比发送方多,目前看到的只有0.

解决办法:如果是0的情况,比较好判断,非0的情况还没有遇到过,所以以0为例作说明。

首先应该是什么情况下会多0,在Linux上,如果串口LSR寄存器的overrun位被置位,则会在接收数据中添加0overrun的意思是串口硬件的缓冲区溢出,说明硬件数据没有别驱动及时接收,通过setserial –g命令查看相关设备的中断号,发现中断号和BIOS指定的不相同,为0,0Linux上是时钟中断,时钟中断10ms调用一次,而串口数据接收需要1ms调用一次中断,这种情况下导致的多数情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值