HAL库驱动框架简述

发布于 2022-08-18  445 次阅读


了解HAL库的基本操作流程,对学习和阅读HAL库源代码是非常有帮助的

对外设的封装

xx_HandleTypeDef(xx外设句柄结构体):

不同的外设都有一个自己的句柄结构体,任意句柄结构体都必备Instance,Init两个成员

Instance成员(xx_TypeDef类型):

句柄结构体的一个对象,功能是一个指针指向具体的一个外设对象的基地址,如GPIOA,GPIOB,串口1,串口2,IIC1,IIC2等等,用指针实例化了句柄结构体

Init(xx_InitTypeDef类型):

用来配置外设初始化,配置外设工作参数,例如GPIO外设,配置它的引脚和输出模式

Hdma*成员(DMA_HandleTypeDef类型,可能一个句柄结构体中有多个):

实现外设的一个DMA功能,要使用的话会将其指向一个特定的DMA通道

LOCK锁(HAL_LockTypeDef类型):

防止资源竞争

STATUS状态(HAL_xx_StateTypeDef类型):

检查句柄结构体状态即检查外设状态

外设初始化使用

HAL_xx_Init:

外设功能初始化,如上图需要一个句柄结构体作为参数,不过在将对应外设的相关寄存器配置好之前,会调用Hal_xx_Mspinit将底层相关资源初始化完成,如时钟,使用到的引脚,中断使能,DMA开启等

Hal_xx_Mspinit:

将外设相关资源初始化完成,如时钟,使用到的引脚等

外设使用逻辑

  • alipay_img
  • wechat_img
想法不去做终究就只是想法
最后更新于 2022-08-18