背景
拟实现接收两个串口的数据,将两个串口的数据进行整合通过一个串口发送出去,功能很简单,但在实操中却遇到了接收一段时间后程序就卡死的现象
解决方法
- 在串口接收中断时开启接收错误中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART2)
{
HAL_UART_Transmit(&huart1, UART2_Rxbuf, 1, 1); // 把收到的字节原样发送出去
//添加下面代码
if(HAL_UART_Receive_IT(&huart2, (uint8_t *)&UART2_Rxbuf, 1) != HAL_OK)
Error_Handler();
/* 开启接收错误中断 */
__HAL_UART_ENABLE_IT(&huart2, UART_IT_ERR);
}
}
- 在usart.c中加入串口错误中断回调函数的定义
/* 中断错误处理函数,在此处理overrun错误 */
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
if(__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET)
{
__HAL_UART_CLEAR_OREFLAG(huart);
HAL_UART_Receive_IT(huart, (uint8_t *)&UART2_Rxbuf, 1);
}
}