串口单线通信

中心思想:

主机发送指令,从机收到并正确解析后进行回复,如此循环。

正常情况:

主机默认发送,从机默认接收。

主机发送前将串口改为发送模式,发送完毕后恢复为接收模式;

从机收到主机指令并正确解析后将串口改为发送模式,发送完毕后恢复为接收模式。

出错表现:

主、从机可以通信且每帧指令包含数据个数相同,但会有数据解析位不符/数据不对位/出现指令外的数据/个别数据连续出错,其之后的数据正常等问题

问题排查:

将主、从机之间发送指令改为互发简单重复的数据,如:主机发 n (n > 0)0X01 ,观察从机接收数据情况;然后改为 n (n同上)0X02,再观察从机接收数据情况,多次重复,观察接收端数据规律;观察并判断是乱码还是其他情况(例如,数据发送/接收需反转 – communication data is inverted and output)

如果没有规律那就说明数据传输过程中出错,需仔细检查串口配置(波特率、校验…)、发送接收模式转换(如果是单线通信的话)

问题原因:

主机与从机在数据未传输完毕时就进行了模式转换,导致数据丢失/出错。

问题解决:

删掉重复的模式转换代码,在合适的位置(即正常情况标题中提到的)进行模式转换即可。