• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

当串口通信接收的数据错误时如何重发

hangtao 2018-12-29 浏览量:5224
当串口通信接收的数据错误时如何重发
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 串口协议本身是物理层的,有奇偶校验。但没有规定错误处理的方法。如果需要重发,需要自己实现数据链路层协议,可以采样CRC校验一组数据,如果CRC校验错误,发送指令给对方让对方重新传输。这个过程还是有些复杂的,类似于TCP/IP协议栈,相当于自己实现部分协议栈的底层功能。

    如果每一次传输的数据不会很长的话,可采用问答方式。传输双方每一次发送数据和校验码,等待对方会送校验结果,如果正确传输下一部分数据,否则重新传输刚才的数据。

    • 发布于 2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:22
  • 你问题描述的不清楚,是怎样的重发,当单片机收到的数据不正确的时候重发?可以直接判断数据是否满足你的要求,是不是去你想得到的数据,如果不是的话就重新发送
    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个建议你自己写一套重发规则,自己判断。单片机对串口没有数据缓存区。

    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 需要你自己规定了,串口没有处理规则
    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 奇偶校验位错误一般不会硬件自动重发的,会产生一些中段错误。

    如果是数据时序出错不会在硬件层面体现出来,需要软件判断。

    可以基于string库的一些查找函数+传输时起始位、结束位来判断是否错误,然后重新调用发送函数

    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 串口是一个只规范物理层,没有数据层的相关规范,在检测数据可靠性的时候通常是使用计算校验码的方式,发射端和接收端采用同一中检验算法,发射端在发送完数据后,会再发送校验码。接收端对比校验码,如果一致,也不用重发,如果不一致说明数据出错,要重发。这时候接收端发送一个自定义的协议,要求数据重发就可以。
    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 你可以写一个类似MODBUS错误重发的机制,当接收方收到的数据错误时发送错误报告报文或者干脆直接不发,发送方收到错误报文或者没收到报文的话就了解了,知道发错了,采取重发。
    • 发布于2018-12-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个可以自己写一些协议函数,也可以用CRC校验辅助,通过上位机判断可以参考下https://bbs.csdn.net/wap/topics/390649941
    • 发布于2018-12-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先你要校验,确定发送的数据是错误的,然后通过指令让上位机重新发送数据
    • 发布于2018-12-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 设计应答机制和校验机制。发送接收数据都要进行校验,校验不对不应答;发送方发现没应答,就再发一次。
    • 发布于2018-12-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 制定一套比较完善的通信机制,发送方和接收方之间一定要有应答。收到后一定给发送方发一个确认信号,定一个超时时间,若超时后还没收到确认信号,那就再发一次;多次超时后,再做特殊处理。
    • 发布于2018-12-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以改换你的通信协议,看看接收信号和数据的校验是否有对错,确认信号
    • 发布于2018-12-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 设计通信协议,应答和校验机制都要有。

    接收到后,一定要回个应答给发送方;发送方收不到应答就再发一次;同时接收要对收到的数据进行校验。

    • 发布于2018-12-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个需要自己有通讯协议,上位机也需要使用这个协议发送不能用串口助手
    • 发布于2019-01-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般是应答,在获得对应应答时认为数据发送成功,否则一直发。应答内部自己定义,通常是加序列号,每次自增,应答序列号与发送一样。就基本可以检测出了
    • 发布于2019-01-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 需要自己的协议实现
    • 发布于2019-01-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个一般就是软件控制的,如果串口发送函数返回失败值,重发一次就行
    • 发布于2019-01-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 要有一个协议来进行规范的,双方约定一个协议,并加反馈机制
    • 发布于2019-01-21
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

当串口通信接收的数据错误时如何重发