请教:串口中断接收问题

2020-01-30 13:35发布

协议帧结构:0x10,0x02为帧头+长度+数据+ 0x10,0x03为帧尾
每次串口中断接收的相邻0x10是一组代表一个0x10数据,比如0x10,0x10,0x10,0x10x,0x10,0x10实际是3个0x10数据。目前我只能做到两个请大家看看,另在数据中0x10,0x10+0x10,0x03帧尾,也解不了。

if(rx_length--)//=0时,全部接收完成
{
uart0_rx_data[rx_count++]=SBUF0;
if(flag_0x10)//这样可以收到连续两个DATA是0x10的字节
{
flag_0x10=0;
break;
}else
{
if((uart0_rx_data[rx_count-2]==0x10)&&(uart0_rx_data[rx_count-1]==0x10))
{
--rx_count;
++rx_length;
flag_0x10=1;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
jxcrg_t35
2020-01-30 22:22
谢谢,目前就是按这篇文章的状态机思路,编写的。通信协议为:以DLE(10H)、STX(02H)作为帧起始字段,以DLE(10H)、ETX(03H)作为帧结束字段。为避免在信息字段中出现DLE,影响数据的正确接收,数据发送方在发送数据前检查信息字段中是否出现DLE,如果信息字段中出现DLE字符,则在此DLE字符后再加一DLE字符。数据接收方如果连续收到两个DLE字符,表明此DLE是数据信息,而不是控制转义字符,去掉一个DLE即可。大家有什么好的思路么?

一周热门 更多>