本帖最后由 lvluoo 于 2025-8-20 23:09 编辑
在用 STM32CubeIDE 和 Nucleo L4R5ZI 开发板。通过轮询方式(HAL_UART_Transmit(...))可以正常使用 lpuart1 进行传输。NVIC 中已启用中断。但切换到 HAL_UART_Transmit_IT(...) 后,开发板会卡在反复调用 HAL_UART_IRQHandler() 的状态。
/* 以下代码工作正常,串口终端有输出 */
result = HAL_UART_Transmit(&hlpuart1, (uint8_t*)"GO-1\r\n", 6, 100);
/* 以下代码***不会返回,串口终端无输出 */
result = HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)"GO-2\r\n", 6);
它之所以不返回,是因为卡在无限调用 HAL_UART_IRQHandler() 的状态。我没有修改过 HAL_UART_IRQHandler(...),只是使用了默认生成的代码。
调用堆栈显示:
HAL_UART_IRQHandler() at stm32l4xx_hal_uart.c:2,509 0x8003408
LPUART1_IRQHandler() at stm32l4xx_it.c:209 0x8000a52
<signal handler called>() at 0xfffffff9
HAL_UART_Transmit_IT() at stm32l4xx_hal_uart.c:1,301 0x8003128
main() at main.c:105 0x800053c
为了验证,我用 Nucleo-F103RB 开发板测试相同的步骤,结果工作正常。
似乎是库和/或生成的代码缺少某些内容。不确定是 lpuart1 还是 L4R5 的问题。数据没有传输,中断也没有被清除/处理。
有没有其他人遇到过这个问题?是否有解决方法?
|