数据包规则定义
定长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=='\r') RxState=2;else{Serial_RxPacket[pxRxPacket]=RxData;pxRxPacket ++;}}else if (RxState==2){if(RxData=='\n'){RxState=0;Serial_RxFlag = 1;Serial_RxPacket[pxRxPacket]='\0';}}}
}