回调函数在 stm32 Hal 库中是如何工作的?

How the callback functions work in stm32 Hal Library?

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

事实是我正在使用HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)这个函数来接收其他设备的数据并检查那些data.So 我使用usart中断来接收它们。

但是不知道回调函数什么时候执行,是看接收缓冲区的长度还是数据的缓冲区?

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

PS:我正在使用stm32-nucleo-f410开发板与AT命令设备通信,我是新手。 (很抱歉我的英语不好!) 非常感谢。

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

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