回调函数如何在stm32 Hal Library中工作?

时间:2018-03-25 18:08:05

标签: stm32 at-command hal

众所周知,Hal Lib提供了一些回调函数来管理硬件中断。但我不知道它们是如何工作的?

事实上,我正在使用 HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart)此功能,以便接收其他设备'数据并检查那些数据。所以我使用usart中断来接收它们。

但是我不知道何时执行回调函数,它取决于接收缓冲区的长度还是数据的缓冲区?

我猜硬件中断将在接收到字符时被触发,但回调函数将在接收缓冲区已满后执行。

PS:我正在使用stm32-nucleo-f410开发板与AT推荐设备进行通信,我是新手。 (对不起,我的英语很差!) 非常感谢。

1 个答案:

答案 0 :(得分:4)

当接收函数中指定的数据量(HAL_UART_Receive_IT的第三个参数)时,将调用您引用的回调。您是正确的,每次接收到字符时都会调用UART中断服务例程(ISR),但是在使用库内部发生的HAL并且不需要由您管理时。每次调用ISR时,接收到的字符都会通过HAL_UART_Receive_IT的第二个参数移动到您提供的数组中,当达到调用指定的字符数时,将在该ISR中调用回调(因此,请确保不要做任何需要花费太多时间才能完成的事情 - ISR应该很短,并且HAL库中的ISR已经非常冗长以处理每个可能的用例。)

此外,如果您发现即使您向外设发送了足够的数据也没有触发回调,请确保中断实际已启用 - HAL_UART_Receive_IT功能实际上并未启用中断,必须在外设初始化期间完成。