串口协议本身是物理层的,有奇偶校验。但没有规定错误处理的方法。如果需要重发,需要自己实现数据链路层协议,可以采样CRC校验一组数据,如果CRC校验错误,发送指令给对方让对方重新传输。这个过程还是有些复杂的,类似于TCP/IP协议栈,相当于自己实现部分协议栈的底层功能。
如果每一次传输的数据不会很长的话,可采用问答方式。传输双方每一次发送数据和校验码,等待对方会送校验结果,如果正确传输下一部分数据,否则重新传输刚才的数据。
这个建议你自己写一套重发规则,自己判断。单片机对串口没有数据缓存区。
奇偶校验位错误一般不会硬件自动重发的,会产生一些中段错误。
如果是数据时序出错不会在硬件层面体现出来,需要软件判断。
可以基于string库的一些查找函数+传输时起始位、结束位来判断是否错误,然后重新调用发送函数
设计通信协议,应答和校验机制都要有。
接收到后,一定要回个应答给发送方;发送方收不到应答就再发一次;同时接收要对收到的数据进行校验。