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

问题描述 投票:0回答:1

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

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

但是不知道回调函数什么时候执行;它取决于接收缓冲区的长度还是数据缓冲区的长度?

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

PS:我正在使用stm32-nucleo-f410开发板与AT命令设备通信,我是新手。

stm32 at-command hal
1个回答
7
投票

当接收函数中指定的数据量(

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

此外,如果您发现即使向外设发送足够的数据,回调也没有被触发,请确保中断实际上已启用 -

HAL_UART_Receive_IT
函数实际上并未启用中断,这是必须要做的在外设初始化期间。

© www.soinside.com 2019 - 2024. All rights reserved.