我们都知道HAl库在使用过程中绕来绕去,好多回调函数。下面对普通函数和回调函数进行简单解释。
对普通函数的调用:
调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”
对回调函数调用:
调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
其实上面对回调函数解释有点牵强,同时执行不妥,并行处理任务 但关键也在于处理完任务后无等待 进而有并行的概念 HAL库调用回调函数 进入用户编写的回调函数 只有等回调执行完毕 或有更高优先级的中断被触发才会打断当前执行 所以标准库不存在并行处理,HAL库同样。
比如串口回调。
voidHAL_UART_IRQHandler(UART_HandleTypeDef*huart);
voidHAL_UART_TxCpltCallback(UART_HandleTypeDef*huart); //发送回调
voidHAL_UART_TxHalfCpltCallback(UART_HandleTypeDef*huart);
voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart); //接收回调
voidHAL_UART_RxHalfCpltCallback(UART_HandleTypeDef*huart);
voidHAL_UART_ErrorCallback(UART_HandleTypeDef*huart);
voidHAL_UART_AbortCpltCallback(UART_HandleTypeDef*huart);
voidHAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef*huart);
voidHAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef*huart);
其实我们也可以在中断函数里添加一个既可以了。
还有我们常用的滴答定时器中断函数,详解一下。
进去看一下。
每次中断+1计数。
我们再看经常用的HAL_Delay(100)函数。
这个滴答定时器中断函数经常用,自己写一个,作为一个时标或者心跳。
其他中断函数雷同。