C语言,0x4000是16进制,转换成二进制是0100 0000 0000 0000,相当于把15位置1,0x0d是ASCII码中的回车键
if((USART2_RX_STA&0x8000)==0)//接收未完成 { if(USART2_RX_STA&0x4000)//接收到了0x0d 0x0d是ASCII的回车:移动光标至该行的起始位置 { if(r!=0x0a)USART2_RX_STA=0;//接收错误,重新开始 0x0a是ASCII的回车:换行至下一行行首起始位置 else USART2_RX_STA|=0x8000; //接收完成了 } else ...
u16 USART_RX_STA=0; //接收状态标记 void USART1_IRQHandler(void) { u8 res; #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS. OSIntEnter(); #endif if(USART1->SR&(1<<5)) { //接收到数据 res=USART1->DR; if((USART_RX_STA&0x8000)==0) { //接收未完成 if(USAR...
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { 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...
if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; ...
Î′íê3é{if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d{if(...
(USART_RX_STA&0X8000)==0){ //接收未完成if(USART_RX_STA&0X4000){ //接收到了0x0dif...
USART1_IRQHandler的理解
定义USART_RX_BUF就是为了进行设置了接收字符的缓冲区 定义USART_RX_STA是为了对缓冲区状态的事实监控 代码的整体逻辑 0-13位是为了记录接收数据的有效个数,不能大于200 14位是接受到0X0D的标志位,对于检测到其的出现则进行置1 15位是当前面14位为1又紧接着接收到0X0A的时候置1,表示数据接收完成 ...
也可软件手动清零 USART_Cmd(USART1, ENABLE); //使能串口 } void USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改) u8 Res; //以下是字符串接收到USART1_RX_BUF[]的程序,(USART1_RX_STA&0x3FFF)是数据的长度(不包括回车) //当(USART1_RX_STA&0xC000)为真时表示数据接收完成...