假设现在通过串口向单片机发送四个字节的数据:
0xAB,0xBC,0xCD,0xDE
而且这四个数据是循环发送的,间隔是t个ms,就是0xDE发送后,过t个微秒,又开始发送0xAB
设置四个unsigned char A,B,C,D来接收数据
应该怎么保证A收到0xAB,B收到0xBC……
如何避免ABCD收到的字节是错位的,即如何避免B = 0xCD,C = 0xDE,D = 0xAB,A = 0xBC这样的情况?
Joey Mao:
你可以将要发送的数据存到一个数组,然后一个循环以一定的间隔发送这个数组的内容,接收也按发送的顺序存入一个数组,应该可以保证接收到的和发送的数据是一致的
xyz549040622:
我觉得,加个校验判断更稳妥,因为时间毕竟是有误差,延时和定时器都有误差的,时间长了肯定会出错,串口发送数据的时候,0xAB,0xBC,0xCD,0xDE这四个数据前面加数据地址,然后在MCU中判断接收
Michael Sun:
楼主可以考虑定一个通信协议,前面是帧头,后面依次是四个数,最后是帧尾。
中断服务程序中,判断接收到帧头后,开始接收数据。接收到帧尾后代表一帧数据接收完毕,并可以得到帧的长度。