STM32 HAL UART RXNE 中断未生成

问题描述 投票:0回答:2

我正在使用 HAL 驱动程序以及 CubeMX 生成的代码。在主程序中我调用了

HAL_UART_Receive_IT()
。通过 UART(以环回方式连接)传输数据后,我可以看到模块正在接收字节并设置寄存器中的 RXNE 位。但是中断没有产生?我无法解释为什么......在
HAL_UART_Receive_IT()
函数中有启用中断的代码,所以出了什么问题?

interrupt stm32 uart hal
2个回答
6
投票

您在问题中没有提供足够的信息和代码。 不管怎样,在你的 stm32xx_hal_msp.c 文件中,你从硬件的角度初始化你的外设:一定要启用中断

    HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
    HAL_NVIC_EnableIRQ(USART1_IRQn);

然后添加

void USART1_IRQHandler(void)
{
  HAL_UART_IRQHandler(&huart1);
}

到你的 stm32xx_it.c 文件


0
投票

我刚刚也遇到了类似的问题,终于找到原因了: 我在错误的位置放置了jlink调试器断点,调试器已经读出了uart数据,这将自动重置rxne寄存器,然后irq处理程序中的代码将忽略uart数据。 所以,我重置调试器和MCU,杀死所有断点,将唯一的一个断点放在IRQ处理程序后面,这一次,它成功捕获了UART数据。

© www.soinside.com 2019 - 2024. All rights reserved.