系列文章目录
前言
本文主要介绍了STM32使用串口通信的方法和遇到的问题。
一、HAL库串口中断接收数据溢出问题
问题描述:使用HAL库,在用串口中断接收数据时,难免会遇到接收数据溢出问题,在检测到溢出中断清除标志后,串口接收数据仍会出现异常现象。
原因分析:由于HAL库中存在一些状态检测标志,在中断接收数据时,会判断这些标志状态,若状态异常,会导致数据接收异常。
解决方法:通过重写回调函数,在回调函数中进行以下操作即可解决:
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
{
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
__HAL_UART_CLEAR_OREFLAG(huart);
__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE);
__HAL_UART_ENABLE_IT(huart,UART_IT_ERR);
huart->ErrorCode = HAL_UART_ERROR_NONE;
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
}
}