stm32+空闲中断+串口DMA传输 通信异常问题:通信中断后连不上

stm32+空闲中断+串口DMA传输 通信异常问题:通信中断后连不上

  1. 在stm32与上位机通信过程中,有的时候会受到干扰导致下位机触发通信异常,然后单片机会自动屏蔽通信接收中断,导致只有通信模块不正常,其他部分正常运行。由于通信异常触发发时间不确定导致每次上位机与stm32通信中断的时间也是不确定的,有的时候几个小时,有的时候几天。所以很难复现。但在上位机下发命令比较快时,触发异常的概率就会变大,在复现异常后,通过单步调试发现,触发通信异常时会调用一个通信异常回调函数,可以在这个回调函数中重新初始化通信模块,重新建立通信。
//----------------------------------USART 异常 回调函数----------------------------
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART1)
  {
    __HAL_UART_CLEAR_OREFLAG(&huart1);
    USART1_error_flag = 1;//USART 异常初始化标志位
  }
}


	/*主函数*/
  //USART 通信异常初始化
  if(USART1_error_flag == 1)
  {
    USART1_TX_L();                              //设置为接收状态
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);                           
    HAL_UARTEx_ReceiveToIdle_DMA(&huart1,Usart1.Usart_DMAReceiveCache,Usart1_ReceiveLength);
    memset(Usart1.Usart_ReportCache,0,Usart1_ReportLength);
    USART1_error_flag = 0;
  }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值