当前位置: 代码迷 >> Solaris >> 串口读来的数据有可能发生比特错位吗?解决思路
  详细解决方案

串口读来的数据有可能发生比特错位吗?解决思路

热度:7761   发布时间:2013-02-26 00:00:00.0
串口读来的数据有可能发生比特错位吗?
    linux下用read()函数读取串口数据,读出来的用%c输出,有时正确,有时是乱码,波特率没有问题,请问会是什么原因呢?可能会出现比特错位的现象吗?
    比如把 0x30 0x30 0x30 0x30 0x30 ( 0011000000110000001100000011000000110000 )
    读取为 0x18 0x18 0x18 0x18 ...  ( 00011000000110000001100000011000 ...) 错了一个比特位
    如果是这样的话?是什么原因造成的呢?怎么解决呢?
    如果不可能出现这种情况,那又会是什么原因呢?
    我在网上找了很多资料,没有关于read()读取串口会出现比特错位的介绍!!
    等待高手解决!!
------解决方案--------------------------------------------------------
串口比特位出错应该是比较常见的吧,之前我在Windows下编程序读取串口的信息,也经常会有错误发生。不过至于是不是read()函数的问题,不好说。有可能是发送端的问题,也有可能是接收端的问题。很难笼统判断。
------解决方案--------------------------------------------------------
或者可以将波特率降低点,比如9600,或者4800
------解决方案--------------------------------------------------------
建议你从易到难,逐个排查:先排除最容易解决的可能原因(串口工作模式),然后再去考虑比较难解决的原因(驱动问题啊,read()函数啊之类的)。

还有一个问题就是你在测试串口的时候,远离干扰源,如果你的测试环境有很大的电磁干扰,那也会造成这种情况。
------解决方案--------------------------------------------------------
fffff
------解决方案--------------------------------------------------------
硬件是这一层肯定不会,硬件以上的层次可能会有问题

我觉得你八成是配置有问题,两头配得不一样。
------解决方案--------------------------------------------------------
引用:
建议你从易到难,逐个排查:先排除最容易解决的可能原因(串口工作模式),然后再去考虑比较难解决的原因(驱动问题啊,read()函数啊之类的)。

还有一个问题就是你在测试串口的时候,远离干扰源,如果你的测试环境有很大的电磁干扰,那也会造成这种情况。


这个不会有问题
------解决方案--------------------------------------------------------
引用:
? ? linux下用read()函数读取串口数据,读出来的用%c输出,有时正确,有时是乱码,波特率没有问题,请问会是什么原因呢?可能会出现比特错位的现象吗?
? ? 比如把 0x30 0x30 0x30 0x30 0x30 ( 0011000000110000001100000011000000110000 )
? ? 读取为 0x18 0x18 0x18 0x18 ...? ( 00011000000110000001100000011000 ...) 错了一个比特位
? ? 如果是这样的话?是什么原因造成的呢?怎么解决呢?
? ? 如果不可能出现这种情况,那又会是什么原因呢?
? ? 我在网上找了很多资料,没有关于read()读取串口会出现比特错位的介绍!!
? ? 等待高手解决!!

可以确认,是配得不对,你看看你的停止位什么的。
  相关解决方案