该文章是针对于串口通讯过程中快速定义命令而写的,算是我自己的一个通用化的平台,专门用来进行串口调试用,莫要取笑
要处理串口数据首先是要对单片机的串口中断进行处理,我的方法是正确的命令必须要在命令的结尾处同时带有回车和换行,处理过程如下
//串口接收缓冲区 u8 serial_Buffer[SERIAL_MAX_LENGTH] = {0}; //串口接收数据长度 u16 serial_Buffer_Length = 0; static void SerialRecv(u8 ch) { if((serial_Buffer_Length&0x8000) == 0x8000)//已经接收完成,系统还没处理 { serial_Buffer_Length |= 0x8000;//退出 } else if((serial_Buffer_Length&0x4000) == 0x4000)//接收到回车还没接收到换行 { if(ch == \'\n\')serial_Buffer_Length |= 0x8000; else { //一帧接受失败 serial_Buffer_Length = 0; } } else { if((serial_Buffer_Length&0xff) < SERIAL_MAX_LENGTH) { if(ch == \'\r\')serial_Buffer_Length |= 0x4000; else { serial_Buffer[(serial_Buffer_Length&0xff)] = ch; serial_Buffer_Length++; } } else { //一帧接受失败 serial_Buffer_Length = 0; } } } void USART1_IRQHandler(void) { u8 ch = 0; if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)//检查中断发生 { ch = (u8)USART_ReceiveData(USART1); USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断 // Debug_Serial_Send_Char(ch); //将收到的数据发送出去 SerialRecv(ch); //处理中断数据 } }