最近学校 做个通信项目 现在要求接收PC发过来的数据进行处理 分别是接收3串不同的字符 (1)AA 00 C0 (2)AA 00 C2 和(3)AA 00 C1 XX XX XX XX XX 检验。(1)(2)指令是固定的,已经做好了。现在是第三条指令 因为C1后的字节需要读取判断, 好像接收到AA 00 C1 (01) xx xx xx xx xx 校验是灯的 (02)是水壶的 。问题是现在我不知道用哪种接收形式比较好 我把数据存进数组中又读不出来 。一个个读判断哪工作量又实在是吓人。有没有大神做过类似的,给点意见最后有点源码的,谢谢
以下是在下参照原子哥写的部分源码 :
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x0100)==0) //判断是否接收到AA 00 C1(否执行)
{
if((USART_RX_STA&0x8000)==0) //接收未完成
{
if(USART_RX_STA&0x2000) //接收到了0xAA,0x00
{
if((res!=0xa0)&&(res!=0xa1)&&(res!=0xa2))USART_RX_STA=0;
else if(res==0xC0)USART_RX_STA|=0x8000; //AA 00 C0
else if(res==0xC2)USART_RX_STA|=0x1000; //AA 00 C2
else if(res==0xC1)USART_RX_STA|=0x0100; //AA 00 C1 (功能)
}else //还没收到0xAA,0X00
{
if(USART_RX_STA&0x4000)
{
if(res==0x00)USART_RX_STA|=0x2000; //接收到00
}else
{
if(res==0xAA)USART_RX_STA|=0x4000; //接收到AA
}
}
}
}else //接收AA 00 C1剩下的功能码进行判断
{
////////接收剩下的数据
}
|