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