众所周知,Hal Lib提供了一些回调函数来管理硬件中断。但我不知道它们是如何工作的?
事实上,我正在使用 HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart)此功能,以便接收其他设备'数据并检查那些数据。所以我使用usart中断来接收它们。
但是我不知道何时执行回调函数,它取决于接收缓冲区的长度还是数据的缓冲区?
我猜硬件中断将在接收到字符时被触发,但回调函数将在接收缓冲区已满后执行。
PS:我正在使用stm32-nucleo-f410开发板与AT推荐设备进行通信,我是新手。 (对不起,我的英语很差!) 非常感谢。
答案 0 :(得分:4)
当接收函数中指定的数据量(HAL_UART_Receive_IT
的第三个参数)时,将调用您引用的回调。您是正确的,每次接收到字符时都会调用UART中断服务例程(ISR),但是在使用库内部发生的HAL并且不需要由您管理时。每次调用ISR时,接收到的字符都会通过HAL_UART_Receive_IT
的第二个参数移动到您提供的数组中,当达到调用指定的字符数时,将在该ISR中调用回调(因此,请确保不要做任何需要花费太多时间才能完成的事情 - ISR应该很短,并且HAL库中的ISR已经非常冗长以处理每个可能的用例。)
此外,如果您发现即使您向外设发送了足够的数据也没有触发回调,请确保中断实际已启用 - HAL_UART_Receive_IT
功能实际上并未启用中断,必须在外设初始化期间完成。