我正在使用 HAL 驱动程序以及 CubeMX 生成的代码。在主程序中我调用了
HAL_UART_Receive_IT()
。通过 UART(以环回方式连接)传输数据后,我可以看到模块正在接收字节并设置寄存器中的 RXNE 位。但是中断没有产生?我无法解释为什么......在 HAL_UART_Receive_IT()
函数中有启用中断的代码,所以出了什么问题?
您在问题中没有提供足够的信息和代码。 不管怎样,在你的 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 文件
我刚刚也遇到了类似的问题,终于找到原因了: 我在错误的位置放置了jlink调试器断点,调试器已经读出了uart数据,这将自动重置rxne寄存器,然后irq处理程序中的代码将忽略uart数据。 所以,我重置调试器和MCU,杀死所有断点,将唯一的一个断点放在IRQ处理程序后面,这一次,它成功捕获了UART数据。