STM32使用HAL库时,多串口运行一段时间后卡死

首先,在STM32CUBE里,将UART2设置为全局中断

其次,使能RXNE中断和ORE中断,main.c中的代码如下:

void main(void)
{
    ...
    if(HAL_UART_Receive_IT(&huart2,(u8 *)&i,1) != HAL_OK)   Error_Handler();
    /* 开启接收错误中断 */
    __HAL_UART_ENABLE_IT(&huart2, UART_IT_ERR);
    ...
}

接着,在usart.c中加入串口错误中断回调函数的定义:

/* 中断错误处理函数,在此处理overrun错误 */
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
    uint8_t i = 0;

    if(__HAL_UART_GET_FLAG(huart,UART_FLAG_ORE) != RESET) 
    {
        __HAL_UART_CLEAR_OREFLAG(huart);
        HAL_UART_Receive_IT(huart,(u8 *)&i,1);
    }
}
单纯处理溢出中断的话,这样就可以了;如果想处理其他一些错误,比如帧错误等等,就继续判断标志位;如果想在检测到错误之后做一些处理,也可以写在回调函数里。

你可能感兴趣的:(STM32)