ST公司的HAL(Hardware Abstraction Layer)库中的回调机制详解

ST公司的HAL(Hardware Abstraction Layer)库中的回调机制是其核心设计之一,主要用于处理外设中断事件和异步操作。以下是对其机制的详细讲解及代码示例:


一、HAL库回调机制的核心原理

  1. 弱定义(Weak Declaration)
    HAL库中默认的回调函数以__weak修饰符定义(如HAL_UART_TxCpltCallback),允许用户在工程中重写这些函数以实现自定义逻辑,而无需修改HAL库源代码。

  2. 中断驱动
    当外设触发中断(如UART传输完成、定时器溢出等)时,HAL库的中断服务程序(如USARTx_IRQHandler)会自动调用对应的回调函数。

  3. 多态性支持
    通过用户自定义的回调函数,同一外设的不同实例(如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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值