|
void USART2_IRQHandler(void)
{
uint8_t vlue;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
// printf("**\r\n");
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
vlue = USART_ReceiveData(USART2);
if(UART_HandleStruct.Package_Flag ==0)
{
if(UART_HandleStruct.UART_Flag1 ==0)
{
if(vlue == 0xff)
{
UART_HandleStruct.UART_Count = 0;
UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count]=vlue;
UART_HandleStruct.UART_Count++;
UART_HandleStruct.UART_Flag1 = 1;
}
return ;
}
else if(UART_HandleStruct.UART_Flag2 ==0)
{
UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count]=vlue;
UART_HandleStruct.UART_Count++;
if(UART_HandleStruct.UART_Buf[1] == 0xff)
{
UART_HandleStruct.UART_Flag2 = 1;
}
else
{
UART_HandleStruct.UART_Flag1 = 0;
}
return ;
}
else
{
UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count] = vlue;
if(UART_HandleStruct.UART_Count >=4 && UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count] == 0x55 && UART_HandleStruct.UART_Buf[UART_HandleStruct.UART_Count - 1] == 0xFF)
{}
else
UART_HandleStruct.UART_Count++;
if(UART_HandleStruct.UART_Count == 0x04)
{
UART_HandleStruct.UART_Cmd_len = UART_HandleStruct.UART_Buf[2]*256+ UART_HandleStruct.UART_Buf[3];
}
if(UART_HandleStruct.UART_Count == (UART_HandleStruct.UART_Cmd_len + 4))
{
UART_HandleStruct.Package_Flag = 1;
UART_HandleStruct.UART_Flag1 = 0;
UART_HandleStruct.UART_Flag2 = 0;
// printf("Package_Flag =1 \r\n");
}
}
}
}
}
假如接收串口数据有丢失,if(UART_HandleStruct.UART_Count == (UART_HandleStruct.UART_Cmd_len + 4))这句就一直不进去,这时,UART_HandleStruct.UART_Flag1为1,UART_HandleStruct.UART_Flag2为1,串口接收程序就乱套了,UART_HandleStruct.UART_Flag1不为0,UART_HandleStruct.UART_Flag2不为0,就不能正确接收新一帧数据.
|
|