STM32串口 断点调试 中断异常

使用了stm32L433 是M4的内核
采用了中断接受数据的方式,正常处理的时候,都是正常的。但是当使用keii5 断点调试的时候。中断异常了,明明没有数据接受了,但是依旧出现不停的进入中断。

调试的时候,看到ISR寄存器的OER位,正常的时候是reset的状态,一旦断点调试,就会出现溢出。
使用的hal库。
__HAL_UART_GET_IT(&huart2,UART_IT_ORE);使用这个来获取中断的情况是无效的 返回值是RESET。
因为没有失能 ERR 中断。

值得一提的事,一旦串口初始化,开启UART_IT_RXNE中断,OER溢出中断自动开启。

使用的清楚溢出中断的方式是: 读取的是flag标志位,不是中断产生标志位
if((__HAL_UART_GET_FLAG(&huart2, UART_FLAG_ORE) != RESET))
{
__HAL_UART_CLEAR_OREFLAG(&huart2);
}

STM32单片机在使用串口通信时,如果中断接收和发送功能出现问题,可能是由以下几个原因导致的: 1. **硬件连接错误**:检查TX/RX引脚是否正确连接到计算机或者其他设备,并确认信号线的正负极性以及波特率设置是否匹配。 2. **中断配置不正确**:检查并确保USART中断(如USART_IT_RXNE for RX空闲、USART_IT_TXE for TX完成等)是否已正确启用并在适当的中断服务函数(ISR)中处理。 3. **DMA配置错误**:如果使用了DMA传输数据,确保DMA通道配置正确并且中断管理无误。 4. **软件状态同步**:在中断服务函数中更新串口的状态(如发送缓冲区和接收到的数据)时,需要保证数据操作的原子性,避免数据混乱。 5. **程序控制问题**:确保在发送过程中不会中断正在接收的操作,反之亦然。例如,在发送数据期间,应禁止新的接收操作,防止干扰。 6. **计数溢出**:如果波特率设置过高,可能会导致计数溢出,这时可以尝试降低波特率或优化计数器设置。 7. **错误校验**:检查串口是否启用了奇偶校验或CRC校验,如果没有正确配置可能导致错误的接收或发送。 为了排查这个问题,你可以按照上述步骤一步步进行检查和调试,同时记得在每个关键点添加日志或者调试断点,以便更好地定位问题所在。如果你能提供具体的代码片段或错误信息,我会更有可能帮助你找到解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值