最近看到有关串口中断引发的问题,个人把自己一直使用的串口解析上传一下:
if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_PE) != RESET)
{
USART_ReceiveData(QX5_USARTx);
USART_ClearFlag(QX5_USARTx, USART_FLAG_PE);
}
if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_ORE) != RESET)
{
USART_ReceiveData(QX5_USARTx);
USART_ClearFlag(QX5_USARTx, USART_FLAG_ORE);
}
if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_FE) != RESET)
{
USART_ReceiveData(QX5_USARTx);
USART_ClearFlag(QX5_USARTx, USART_FLAG_FE);
}
if(USART_GetITStatus(QX5_USARTx,USART_IT_RXNE)!=RESET)
{
//数据缓冲转换
if(UART2_Flag.Buf_Now==Buf_A) //现在用的是Buf_A,则使用Buf_B
{
UART2_Flag.USER_USART_RX_Buf_A[UART2_Flag.Num_Rx] = USART_ReceiveData(QX5_USARTx);
UART2_Flag.Num_Rx++;
}
else //现在用的是Buf_B,则使用Buf_A
{
UART2_Flag.USER_USART_RX_Buf_B[UART2_Flag.Num_Rx] = USART_ReceiveData(QX5_USARTx);
UART2_Flag.Num_Rx++;
}
}
if(USART_GetITStatus(QX5_USARTx,USART_IT_IDLE)!=RESET)
{
Uart_stateus = QX5_USARTx->SR;
Uart_stateus = QX5_USARTx->DR; //清除串口空闲接受中断
if(UART2_Flag.Buf_Now==Buf_A) //现在用的是Buf_A,则使用Buf_B
{
UART2_Flag.Buf_Now=Buf_B;
/////////////////////////////////////
//2019年7月11日;加入;
memcpy(UART2_Flag.USER_USART_RX_Buf_B, Empty_Flag.Null, 255);
/////////////////////////////////////
}
else
{
UART2_Flag.Buf_Now=Buf_A;
/////////////////////////////////////
//2019年7月11日;加入;
memcpy(UART2_Flag.USER_USART_RX_Buf_A, Empty_Flag.Null, 255);
/////////////////////////////////////
}
UART2_Flag.IDLE_FLAG=SET;
}
}
|