HAL库串口中断RX中的Overrun Error解决方案
1. ORE触发条件
首先简单研究一下什么时候会出现overrun的问题,配置正常的HAL串口中断接收如下
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* judge interrupt source */
if(huart ->Instance == USART2)
{
//send data to huart1 from huart2
HAL_UART_Transmit(&huart1, (uint8_t*)recv_buf, 3,0xFFFF);
//enable RX IT
HAL_UART_Receive_IT(huart, (uint8_t*)recv_buf, 3);
}
}
可以看出,分三种情况:
- 发送数据=接收缓存,正常
- 发送数