void USART1_IRQHandler(void) //Ԯࠚ1אؾϱԌѲ { u8 Res; #if SYSTEM_SUPPORT_OS //ɧڻSYSTEM_SUPPORT_OSΪ֦ìղѨҪ֧ԖOS. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //ޓ˕א(ޓ˕սք˽ߝҘѫˇ0x0d 0x0aޡβ) { Res =USART_ReceiveData(USART1); //ׁȡޓ˕սք˽ߝ if((USART_RX_STA&0x8000)==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 ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//ޓ˕˽ߝխϳ,טтߪʼޓ˕ } } } } #if SYSTEM_SUPPORT_OS //ɧڻSYSTEM_SUPPORT_OSΪ֦ìղѨҪ֧ԖOS. OSIntExit(); #endif } #endif 、
时间: 2024-04-09 20:32:11 浏览: 101
这是一个名为USART1_IRQHandler的函数,用于处理串口1的中断事件。
函数内部首先定义了一个无符号8位整型变量Res。
接下来使用条件判断语句if来判断是否接收到了串口1的接收中断(USART_IT_RXNE不为RESET)。如果条件成立,则执行接下来的代码。
在if语句的内部,通过USART_ReceiveData函数获取接收到的数据,并将其赋值给变量Res。
接着,通过条件判断语句检查USART_RX_STA的值。如果USART_RX_STA的最高位(0x8000)为0,表示接收状态还没开始。
在这个条件判断语句的内部,进一步通过条件判断语句检查USART_RX_STA的值。如果USART_RX_STA的第14位(0x4000)为1,表示上次接收到的数据为0x0d(回车符)。
如果条件成立,继续判断当前接收到的数据是否为0x0a(换行符)。如果是,则将USART_RX_STA的最高位(0x8000)置位,表示接收完成。
如果条件不成立,则说明当前接收到的数据不是0x0a,将USART_RX_STA重置为0,表示重新开始接收。
在上述条件判断语句的else分支中,处理上次接收到的数据不为0x0d(回车符)的情况。
首先判断当前接收到的数据是否为0x0d(回车符)。如果是,则将USART_RX_STA的第14位(0x4000)置位。
如果条件不成立,则将当前接收到的数据存入USART_RX_BUF数组,并递增USART_RX_STA的值。如果USART_RX_STA超出了数组范围(USART_REC_LEN-1),则将USART_RX_STA重置为0,表示重新开始接收。
最后,根据系统是否支持操作系统(SYSTEM_SUPPORT_OS)进行相应的操作系统相关处理。
请注意,这只是函数的定义部分,实际上函数内部的具体实现可能需要根据具体的硬件平台和编程环境进行调整。
阅读全文