数据包规则定义
定长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]=' ';
}
}
}
}


