了解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:
将外设相关资源初始化完成,如时钟,使用到的引脚等
外设使用逻辑

Comments NOTHING