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;//接收数据错误,重新开始接收 } } } }
标签:STA,Res,RX,STM32,正点,串口,接收,BUF,USART2 From: https://www.cnblogs.com/fanhuahe/p/16996471.html