大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-6-15
|
串口通信,发送端发一串数据,接收端进行简单处理后打印出来;定义了基本的协议格式,发端:5a 09 17 5e 44 8d ff 00 00 00 00(数据) 02 45 a5
02 a5为数据帧第2位到第9位的校验和,如果
校验和正确返回 数据帧A
5a 09 17 5e 44 8d ff 00 30 00 30 01 a6 a5
校验失败返回 数据帧B
5a 09 17 5e 44 8d ff 01 00 00 00 01 47 a5
我现在调试出现的问题是,发送端在连续发生帧的过程中,为什么校验和正确的情况下会输出一遍A再
输出一遍B。如果接收到一帧错误的数据,就算之后接收到一帧正确的数据还是只能返回B,也就是说
只有复位才能重新识别发端的数据,想问问朋友们我的问题怎么解决呢?我觉得是自己的标志位没设对,不知道怎么改了。。。
部分代码如下:
数据处理部分
//如果校验位没问题接收该帧进数据缓存,如果该帧有问题扔掉该帧,向发送端返回数据位为全零的标识
if(TotalCheckSum==2*CheckSum )
{
for(i=0;i<DataLength;i++)
{
Rxdata[i]=Rxbuffer[i];
}
Sta=1; //标志位1
StaMessage=1;
//StaError=0;
}
//如果校验位有问题
if(TotalCheckSum!=2*CheckSum)
{
for(i=0;i<DataLength;i++)
{
Rxerrordata[i]=Rxbuffer[i];
}
Sta=1;
StaError=1;
}
主函数
int main(void)
{
while(1)
{
if(Sta)
{
if(StaMessage)
{
for(count=0;count<DataLength;count++,Txbuffer_Num++)
{
Usart_SendByte(USART1,Rxdata[Txbuffer_Num]);
}
StaMessage=0;
}
if(StaError)
{
//开始传帧
for(count=0;count<DataLength;count++,Txbuffer_Num++)
{
Usart_SendByte(USART1,Rxerrordata[Txbuffer_Num]);
}
StaError=0;
}
Sta=0;
}
}
}
|
|