关于STM32中HAL库的回调函数分析

前言

在STM32芯片开始从固件库到HAL库迁移后,单片机底层驱动的可移植性越来越好了也越来越像上层应用程序了。因为它把底层的部分硬件相关(寄存器)给屏蔽了。

回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

补充说明:回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

问题:

1. 为什么说回调函数可以实现异步操作?

2. 回调函数被系统调用到底是怎么调用的?

解答:

问题2与问题1其实是同一个问题。回调函数的异步操作是通过中断或者DMA这种不需要CPU参与的操作来完成了。通过一个全局的函数指针变量,在初始化阶段通过将我们自己定义的回调函数赋值给这个全局的函数指针变量(一般我把这个过程称为“回调函数的注册”),然后在中断函数中通过函数指针来调用此回调函数。这样就实现了回调,比如:我们的串口通信中,在完成数据传输后会进入中断函数此时中断函数中会通过全局的函数指针来调用回调函数。通过以下代码片段可以更加清晰的了解这个过程。

注册回调函数:(USART_Initialize)

关于STM32中HAL库的回调函数分析

调用回调函数:(USART_IRQHandler)

关于STM32中HAL库的回调函数分析