stm32l4 外部中断按键会卡死_STM32串口中断卡死主循环问题分析

本文详细分析了一个STM32L4项目中,主循环因外部中断按键和串口USART2接收中断可能出现的卡死问题。通过对USART2中断处理函数的检查和错误排查,发现问题是由于RXNE和ORE中断未正确处理导致的Overrun Error。解决方案是改进中断处理函数,确保在接收错误时读取并丢弃USART_DR寄存器的数据。
摘要由CSDN通过智能技术生成

在一项目中,使用STM32作为主控,程序运行一段时间后概率出现主循环卡死现象。

问题分析如下:

1、程序USART2不停接收并处理串口数据,波特率115200;

2、主循环卡死;

3、USART1中断及TIM2中断响应函数运行正常;(USART1及TIM2中断优先级均比USART2高)

4、出现现象后,拔掉USART2的接收数据线,现象不能回复正常;

5、出现现象后,拔掉后再插入USART2的接收数据线,现象不能回复正常;

6、并未出现HardFault现象;

基于以上4点,可能原因如下:

1、USART2接收中断标志没有清除;

2、堆栈数据溢出,导致程序异常;

3、USART2中断重入导致异常;

4、USART2中断函数被异常响应;

5、USART2中断ERR;

对于以上可能原因一一分析:

1、中断接收标志清楚问题:

(1)USART2接收中断响应函数如下:

void USART2_Istr(void)

{

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)

{

USART_ClearFlag(USART2, USART_FLAG_RXNE);

USART_ClearITPendingBit(USART2, USART_IT_RXNE);

Data &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值