嵌入式之串口单线通信
串口单线通信
中心思想:
主机发送指令,从机收到并正确解析后进行回复,如此循环。
正常情况:
主机默认发送,从机默认接收。
主机发送前将串口改为发送模式,发送完毕后恢复为接收模式;
从机收到主机指令并正确解析后将串口改为发送模式,发送完毕后恢复为接收模式。
出错表现:
主、从机可以通信且每帧指令包含数据个数相同,但会有数据解析位不符/数据不对位/出现指令外的数据/个别数据连续出错,其之后的数据正常等问题
问题排查:
将主、从机之间发送指令改为互发简单重复的数据,如:主机发 n (n > 0)
个 0X01
,观察从机接收数据情况;然后改为 n (n同上)
个 0X02
,再观察从机接收数据情况,多次重复,观察接收端数据规律;观察并判断是乱码还是其他情况(例如,数据发送/接收需反转 – communication data is inverted and output)
如果没有规律那就说明数据传输过程中出错,需仔细检查串口配置(波特率、校验…)、发送接收模式转换(如果是单线通信的话)
问题原因:
主机与从机在数据未传输完毕时就进行了模式转换,导致数据丢失/出错。
问题解决:
删掉重复的模式转换代码,在合适的位置(即正常情况标题中提到的)进行模式转换即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 龙猫知识库!