[STM32L0] void USART2_IRQHandler(void) 被连续调用

[复制链接]
560|1
封存into 发表于 2025-9-19 10:00 | 显示全部楼层 |阅读模式
使用带DMA的UART与nRF52833进行通信,并启用了硬件流控制。但在接收数据时,会不断产生中断,导致void USART2_IRQHandler(void)被持续调用。

我已启用RXNE中断以便触发数据接收开始。我在代码中维护状态机,当接收到第一个字节时,我会将状态更改为RX_IN_PROGRESS,然后在RxCpltCallback中将状态改回IDLE状态。

我的主控芯片是STM32L031。

波特率设置为115200。

我在USART2_IRQHandler()中添加了以下代码但未能解决问题。
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_REACK) == SET)
        {
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_REACK);
        }
        if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TEACK) == SET)
        {
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TEACK);
        }
        if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE) == SET)
        {
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TXE);
        }
        if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TC) == SET)
        {
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TC);
        }
        if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE) == SET)
        {
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_IDLE);
        }
        if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) == SET)
        {
                rx_uart_data = (uint16_t) READ_REG(&huart2.Instance->RDR);
                __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
        }
7466668cc1f60c1053.png



您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

124

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部