中级会员
 
- 积分
- 427
- 金钱
- 427
- 注册时间
- 2015-3-11
- 在线时间
- 123 小时
|
1金钱
void USART2_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART2);//(USART1->DR);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)
{
if(Res!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}
else
{
if(Res==0x0d) USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
}
}
这段代码中 当收到0x0d过后,如果收不到0x0a 那么久重新开始收了。但是如果我发下来的一串数里面有0x0d怎么办 比如AA 05 04 00 0d 00 04 00 07 0D 0A
第四位是0d 如果没有这个的话自然而然就能判断末尾没有问题,可是中间有了0d就不行了。
请问这个问题能解决吗?比如说要判断到0d和0a是连续存在的才算是接收完成了,请问该怎么改,这个逻辑我有点混乱。
求教各位大侠!!
|
|