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

串口读来的数据有可能发生比特错位吗?
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()读取串口会出现比特错位的介绍!!
    等待高手解决!!