以0xFF为开头,0xFE为包围,中间固定四个字节长度的数据
//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;
}
}
}
}
以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';
}
}
}
}