HAL库使用主线:外设初始化和外设使用
1.对外设的封装
xx_HandleTypeDef (xx时外设句柄结构体,xx表示任意外设名,比如GPIO,UART等),
xx_HandleTypeDef成员包括以下对象
Instance成员 | xx_TypeDef类型(具体的外设对象,比如GPIOA,GPIOB,串口1,串口2,IIC1,IIC2,DMA1的一个通道等等)一般指向一个外设基地址 |
Init成员 | xx_InitTypeDef类型(外设对象的工作参数,用于配置外设如何工作),配置外设如何工作 |
Hdma*成员 | DMA_HandleTypeDef类型,可能一个句柄结构体中有多个(如果外设支持DMA功能,此成员链接至一个具体的DMA通道) |
LOCK锁 | HAL_LockTypeDef类型(防止资源竞争,在对外设进行操作的时候,有些操作时不可重入的,保证操作的完整性) |
STATUS状态 | HAL_xx_StateTypeDef类型(提示外设的状态) |
2.外设初始化方法
HAL_xx_Init | 参数一般为xx外设的句柄结构体(初始化外设的函数,通过xx_HandleTypeDef下的init的成员配置的参数,将对应外设的相关寄存器配置好,在配置寄存器前,会先调用hal_xx_mspinit函数,将底层的相关资源初始化完成,如时钟,使用到的引脚,中断使能,DMA开启等) |
HAL_xx_MspInit | 参数一般为xx外设的句柄结构体(将外设适用的相关资源初始化完成,比如时钟,引脚等),需要用户自己设置 |
其他Init方法 | 具体参考HAL库驱动.c中的####How to use this driver####块下的注释 |
3.外设使用逻辑
使用外设,就是启动外设功能,一般与以下几种方法
3.1阻塞轮询(Polling)
xx_start | |
xx_read\write | |
...等等函数,特征,传入参数需要一个Tomeout参数 |
3.2中断
xx_start_it | HAL_XX_IRQHandler,(xx外设中断处理函数,在中断入口函数调用,该函数传入参数一般为xxx_HandleTypeDef),该函数中,一般会检测外设状态寄存器的标志,根据不同的标志,最终会回调不同的回调函数) 各种HAL_XX_xxCallback |
xx_read\write_it | |
xx-xx_it |
3.3 DMA(进行数据传输,在CPU不完全监控下进行数据搬运)
xx_start_dma | DMA功能 |
xx_read\write_dma | |
xx_xx_dma...等等DMA启动安徽念书,特征,函数名以dma结尾 |
3.4 其他功能
标志查询/清除,终端功能使能\失能,时钟使能/失能
_HAL_xx_ENABLE_IT | |
_HAL_xx_GET_FLAG | |
...等等 |
对HAL库的全面了解使用
####how to use this driver####
总结:
1.定义并填充xxx外设句柄结构体
2.如果遵循HAL库规范,通过HAL_xxx_MspInit()函数,实现外设底层资源的初始化,包括但不限于GPIO,时钟,DMA,中断等资源初始化
3.调用HAL库的对应外设初始化函数,形如HAL_XXX_Init()
4.初始化完成,开始使用外设
5.使用方法具体查看对应的外设的HAL库驱动包中的说明
#####How to use this driver#####