STM32G4针对串口通信异常的操作

问题来源:

1,串口在通信中拔掉 (热拔插)

2,MCU先通电 串口工具后上电的情况

都会导致MCU串口接收异常,DMA 收发异常

仿真的话串口会报错误出来

比如:

HAL库串口FE帧错误

HAL_UART_ERROR_ORE错误

uart_dma abort onerror

解决办法:

1,

串口初始化时先清一下错误标志

c 复制代码
 __HAL_UART_CLEAR_FLAG(&huart1, UART_CLEAR_FEF | UART_CLEAR_OREF | UART_CLEAR_NEF);     

2,在串口中断里面,停止DMA接收,恢复错误中断使能

c 复制代码
  if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_FE) != RESET)
    {
        // 停止 DMA 接收
        HAL_UART_DMAStop(&huart1);
        // 恢复错误中断使能
          LL_USART_EnableIT_ERROR(USART1);//2
        
    }
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);

3,添加错误回调函数并重新初始化DMA

c 复制代码
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
  /**/
    if (huart->Instance == USART1)
    {
        if (huart->ErrorCode & HAL_UART_ERROR_FE)
        {
            // 清除帧错误标志
            __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
            // 重置接收状态
          	huart->RxState = HAL_UART_STATE_READY;
            // 重新启用空闲中断
            __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE);
        }
        
        // 重新启动 DMA 接收
      //  HAL_UARTEx_ReceiveToIdle_DMA(&huart1, rxdata3, sizeof(rxdata3));
         HAL_UART_Receive_DMA(&huart1,  RxBuffer,   RX_CNDTR);  
         
    }
}
相关推荐
AOI小白新手上路13 小时前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
oshan201215 小时前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
记帖16 小时前
STM32C5A3R开发(7)----ADC电压采集
嵌入式硬件·adc·dac·stm32cubeide·stm32c5·stm32cubemx2·stm32c5a3rgt6
自小吃多18 小时前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件
jianqiang.xue19 小时前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32
Messy create20 小时前
【BMS-AFE-温度检测】
stm32·单片机·能源
东莞市永盛电气20 小时前
三相208V变380V变压器,出海工业设备供电适配方案
python·单片机·嵌入式硬件
桃蹊、21 小时前
串口/网络透传实战:FreeRTOS 多任务架构与连接池设计
stm32·物联网·wifi·freertos
Learn-Share_HY21 小时前
[IT Network]如何配置反向路徑過濾器(rp_filter),以解決路由不對稱問題?
linux·嵌入式硬件·物联网·网络协议·tcp/ip·http·iot
深圳市宝华视联1 天前
医院内网部署手术示教系统注意事项
嵌入式硬件·实时互动·音视频·实时音视频·视频编解码·嵌入式实时数据库