我正在尝试在stm32f4发现板上为UART实现简单的回显(使用freertos(。据我了解,这应该很容易。 首先,我在任务中调用HAL_UART_Receive_IT(&huart3, &rx_char,1)
。在收到中断后,USART3_IRQHandler
应该触发。然后在HAL_UART_RxCpltCallback
我会做HAL_UART_Transmit(&huart3, &rx_char, 1, timeout)
,也许会用HAL_UART_Receive_IT
重新启用它。我的想法对了吗?它应该有效吗?
但就我而言,事实并非如此。我正在尝试从终端发送字符,但从未触发USART3_IRQHandler
。什么也没发生。
该代码是使用Stm32CubeMX生成的,具有Freertos,USART3,NVIC和启用USART3全局中断的功能。
我也在主函数中调用__HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE)
。 怎么了?HAL_UART_Transmit
完美运作。
HAL 不是理想的库。如果出现问题,您必须检查寄存器。 您的问题看起来像不工作的 NVIC。检查它,如果它没有打开,请使用类似 - NVIC_EnableIRQ(USART3_IRQn(; 或者可能没有在 USART3 的 CR1 中打开 RE 寄存器。 无论如何,我在重复 - 检查寄存器。