数据包规则定义
定长HEX数据包
以0xFF为开头,0xFE为包围,中间固定四个字节长度的数据
定长HEX数据包状态机程序编写
//HEX数据包状态机程序编写 void USART1_IRQHandler(void) { static uint8_t RxState = 0; static uint8_t pxRxPacket = 0; if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)== SET) { uint8_t RxData = USART_ReceiveData(USART1); if (RxState==0) { if(RxData==0xFF) { RxState=1; pxRxPacket=0; } } else if (RxState==1) { Serial_RxPacket[pxRxPacket]=RxData; pxRxPacket ++; if (pxRxPacket>=4) { RxState = 2; } } else if (RxState==2) { if(RxData==0xFE) { RxState=0; Serial_RxFlag = 1; } } } }
不定长HEX数据包
以0xFF为开头,0xFE为包围,中间字节长度不固定的数据
定长文本数据包
不定长文本数据包
不定长文本数据包状态机程序编写
//文本数据包状态机程序编写 void USART1_IRQHandler(void) { static uint8_t RxState = 0; static uint8_t pxRxPacket = 0; if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)== SET) { uint8_t RxData = USART_ReceiveData(USART1); if (RxState==0) { if(RxData=='@') { RxState=1; pxRxPacket=0; } } else if (RxState==1) { if(RxData==' ') RxState=2; else { Serial_RxPacket[pxRxPacket]=RxData; pxRxPacket ++; } } else if (RxState==2) { if(RxData==' ') { RxState=0; Serial_RxFlag = 1; Serial_RxPacket[pxRxPacket]=' '; } } } }