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

stm32 Hal库中的回调函数是如何工作的?,stm32,at-command,hal,Stm32,At Command,Hal,众所周知,Hal库提供了一些回调函数来管理硬件中断,但我不知道它们是如何工作的 事实上,我正在使用HAL\u UART\u RxCpltCallback(UART\u HandletTypeDef*huart)这个函数来接收其他设备的数据并检查这些数据。因此我使用usart中断来接收它们 但是我不知道什么时候执行回调函数,这取决于接收缓冲区的长度还是数据缓冲区的长度 我猜硬件中断将在接收字符时触发,但回调函数将在接收缓冲区满后执行 PS:我正在使用stm32-nucleo-f410开发板与AT设

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

事实上,我正在使用HAL\u UART\u RxCpltCallback(UART\u HandletTypeDef*huart)这个函数来接收其他设备的数据并检查这些数据。因此我使用usart中断来接收它们

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

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

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

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


此外,如果您发现即使向外设发送了足够的数据,也没有触发回调,请确保中断已实际启用-必须在外设初始化期间执行的
HAL\u UART\u Receive\u IT
功能实际上没有启用中断。

您所指的回调当接收函数中指定的数据量(HAL_UART_receive_IT的第三个参数)达到时,调用to。您可以确定UART中断服务例程(ISR)每次接收字符时调用,但使用库内部发生的HAL时,不需要您管理。每次调用ISR时,接收的字符将通过
HAL\u UART\u Receive\u IT
的第二个参数移动到您提供的数组中,并且当调用时,将在该ISR中调用回调(因此确保不要做任何需要花费太多时间才能完成的事情-ISR应该很短,HAL库中的ISR对于处理每个可能的用例来说已经相当长了)


此外,如果您发现即使您向外设发送了足够的数据,也没有触发回调,请确保中断已实际启用—
HAL\u UART\u Receive\u IT
函数实际上没有启用中断,这必须在外设初始化期间完成。

我的建议:忘记HAL。使用b如果您可以访问HAL源代码,您可以检查调用特定回调的位置。我的建议是:忘记HAL。使用裸寄存器,而不是使用HAL源代码,您可以检查调用特定回调的位置。