打印

关于串口通讯数据位被错认为起始或停止位的疑惑

[复制链接]
9334|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子混混|  楼主 | 2009-9-8 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,请问一个关于串口通讯的问题,如下:
      由于串口通讯主机和从机上电并不一定同步,假使发送机先在发送数据,而接收机接收慢了一点,那么就会有这样的问题,当接收机错过了起始位的0,而就有可能错把第一个数据0当成起始位进行同步,当刚好顺序下来第10位又是1时,接收机就会将其认为是停止位而认为是正确的接收了一帧数据,那么显然,这帧数据是错误的。
      我的问题是,是不是只有添加校验位才能解决呢?那这样是不是还需要发送一些应答命令请求来避免数据丢失?各位大侠做串口通讯有什么好的方法及思想请分享一下

相关帖子

沙发
chunyang| | 2009-9-8 14:43 | 只看该作者
用协议解决才是本质上的解决方法,校验则是协议的组成部分,带校验位的方法只适合简单应用。

使用特权

评论回复
板凳
xwj| | 2009-9-8 15:03 | 只看该作者
接收机接为什么会“收慢了一点"、会”过了起始位的0“呢???

数据要传输要想可靠,必要的检验和重发机制是必不可少的。
这不是一个检验位能解决的问题,而应该如春阳所说:置顶完整的协议来保证。

使用特权

评论回复
地板
渤海三叠浪| | 2009-9-8 15:12 | 只看该作者
两位大侠都支招了  混混 还不照着做:@

使用特权

评论回复
5
电子混混|  楼主 | 2009-9-8 15:49 | 只看该作者
回xwj大侠,当发送机一直发送,接收机错过起始位的0的情况肯定会有的,比如,接收机上电复位慢于发送机,接收机软复位等,这样开启接收时就会慢于发送机发送,就会出现我说的情况。
    至于协议部分,假使通信协议由“同步字段+控制字段+长度字段+帧头校验字段+数据字段+帧结束字段”构成,那么想请问,是否在完整接收此协议内容再去判断是否错误?如是如此,会不会太慢?当出现收到错误数据后,会不会出现一直收不到正确的一帧?还是说应该发一段数据后等待应答正确后才发下一段?
    有些单片机如PIC,其串口通讯错误时会返回错误标志(如当停止位检测时发现不是1等),假使发送机正在发送的是协议的中间内容,那接收机是应该马上发数据错误的命令给发送机让其停止发送么?
    这么说,串口通讯都应该做成全双工么?即不论发送机还是接收机,都应该写有发送和接收的程序。

使用特权

评论回复
6
mohanwei| | 2009-9-8 15:59 | 只看该作者
串口速度对于单片机的速度,就像走路速度和跑车速度的关系……如果你的数据速率真的很高,本来就不该用uart的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

1

粉丝