stm32串口频繁进入中断导致死机

stm32使用DMA+空闲中断,一次可以接收到一帧数据,数据由DMA直接搬到指定的内存,然后产生空闲中断,非常方便。但是在现场干扰很大的地方,程序死机复位了!初步怀疑是串口的中断没有处理好。

网上查找资料:https://blog.csdn.net/origin333/article/details/49992383发现如果发生ORE串口中断错误,要清除ORE中断需要按顺序读取USART_SR和USART_DR寄存器!那就是说USART_ClearFlag清掉所有Flag后,还必须读一遍USART_DR寄存器!

在这里插入图片描述

由于出错的概率非常小,不好复现。

if(USART_GetITStatus(UART4, USART_IT_IDLE) != RESET)//如果为空闲总线中断
{
	//相应的处理
}if(USART_GetITStatus(USART3, USART_IT_PE | USART_IT_FE | USART_IT_NE |USART_IT_ORE) != RESET)//出错
{
USART_ClearITPendingBit(USART3, USART_IT_PE | USART_IT_FE | USART_IT_NE | USART_IT_ORE);
//读SR后读DR清除ORE   以前以为清除中断就可以了,芯片资料要求需要读数据寄存器的值
		i = uart1->SR;
		i = uart1->DR;
	}
	else
	{
	}
}

在错误中断里加上读错误数据后再也没有出现串口死机。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值