| bit15 |
bit14 |
bit13~0 |
| 接收完成标志 |
接收到0x0d |
接收到的有效字节数 |
过程:接收 a b c d 然后 /n 最后立结束标志位为1
对数组 USART2_RX_BUF[] 处理时,发现数组不会存入/r/n,但是进入接收函数的字符 都带/r/n。所以在做字符串对比时
if (strcmp(USART2_RX_BUF,"ok\r\n") ==0) printf("ok"); 字符串 "ok"不能传入 "ok\r\n"则不能比对
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2); //读取接收到的数据 1、(接收数已字节为单位) 假设发送 “abcd/r/n” 轮询进入函数
//0x80000 = 1000 0000 0000 0000 判断bit15 0或者1 详情看表格
if((USART2_RX_STA&0x8000)==0)//接收未完成
{
if(USART2_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else {
USART2_RX_STA|=0x8000; //接收完成了
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;//作者添加忽略
USART2_RX_STA++;//作者添加忽略
}
}
else //还没收到0X0D
{
if(Res==0x0d){
USART2_RX_STA|=0x4000;
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;//作者添加忽略
USART2_RX_STA++;//作者添加忽略
}
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}