ST公司的HAL(Hardware Abstraction Layer)库中的回调机制是其核心设计之一,主要用于处理外设中断事件和异步操作。以下是对其机制的详细讲解及代码示例:
一、HAL库回调机制的核心原理
-
弱定义(Weak Declaration)
HAL库中默认的回调函数以__weak修饰符定义(如HAL_UART_TxCpltCallback),允许用户在工程中重写这些函数以实现自定义逻辑,而无需修改HAL库源代码。 -
中断驱动
当外设触发中断(如UART传输完成、定时器溢出等)时,HAL库的中断服务程序(如USARTx_IRQHandler)会自动调用对应的回调函数。 -
多态性支持
通过用户自定义的回调函数,同一外设的不同实例(如UART1和UART2)可以独立处理事件,提高代码模块化。
二、回调函数分类
常见的回调类型包括:
| 回调类型 | 触发场景 |
|---|---|
HAL_UART_TxCpltCallback |
UART发送完成 |
HAL_UART_RxCpltCallback |
UART接收完成 |
HAL_TIM_PeriodElapsedCallback |
定时器计数溢出(周期更新) |
HAL_GPIO_EXTI_Callback |
外部中断触发 |
HAL_ADC_ConvCpltCallback |
ADC转换完成 |
三、实现自定义回调的步骤
1. 重写回调函数
在用户代码中重新定义目标回调函数(需与HAL的弱定义函数名一致):
/* 重写UART发送完成回调 */
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
if (huart

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



