HAL库使用主线
- 外设初始化
- 外设使用
HAL库驱动框架
- 对外设的封装:使用xx_HandleTypeDef (xx外设句柄结构体,xx表示任意外设名,如GPIO, UART等)
- Instance成员(xx_TypeDef类型)----指向了外设内,一个具体的外设对象,如GPIOA、GPIOB、串口1、串口2、IIC1、IIC2、DMA1的一个通道等等,实际上,它用指针指向一个外设基地址
- Init成员(xx_InitTypeDef类型)----指向了一个具体外设的初始化结构体,用来配置外设的工作参数,用于配置外设如何去工作
- Hdma*成员(DMA_HandleTypeDef类型,可能一个句柄结构体中有多个)
- 其他资源,如:LOCK锁(HAL_LockTypeDef类型),STATUS状态(HAL_xx_StateTypeDef类型)–指示外设状态
- 外设初始化使用方法:
- HAL_xx_Init,参数一般为xx外设的句柄结构体(初始化外设的函数,通过对xx_HandleTypeDef下的Init的成员配置的参数,将对应外设的相关寄存器配置好。在配置寄存器前,会先调用hal_xx_mspinit函数,将底层的相关资源初始化完成,如时钟、使用到的引脚、中断使能、DMA开启等。)
- HAL_xx_MspInit,参数一般为xx外设的句柄结构体 (将外设底层的相关资源初始化完成,如时钟、使用到的引脚等。)
其他Init方法
- 外设使用逻辑
- 阻塞轮询(Polling)
- xx_start
- xx_read/write
- …等等函数。特征,传入参数需要一个Timeout参数
- 中断(It)
- xx_start_it
HAL_XX_IRQHandler(XX外设中断处理函数,在中断入口函数调用。该函数传入参数一般为xxx_HandleTypeDef,该函数中,一般会检测外设状态寄存器的标志。根据不同的标志,最终会回调不同的回调函数。)
各种HAL_XX_xxCallback(对应xx外设发生xx状态时调用到的函数。由HAL_XX_IRQHandler函数调用。如GPIO产生的EXTI中断,最终可以调用到HAL_GPIO_EXTI_Callback回调函数。串口外设产生的发送完成标志,可以调用到发送完成回调函数HAL_UART_TxCpltCallback。) - xx_read/write_it
- xx_xx_it…等等中断启动函数。特征,函数名以IT结尾
- xx_start_it
- DMA
- xx_start_dma:DMA功能
- xx_read/write_dma
- xx_xx_dma…等等DMA启动函数。特征,函数名以DMA结尾
- 其他功能
- 标志查询/清除,中断功能使能/失能,时钟使能/失能
- __HAL_xx_ENABLE_IT
- __HAL_xx_GET_FLAG
- …等等
- 标志查询/清除,中断功能使能/失能,时钟使能/失能
- 对HAL库驱动全面了解,查看----##### How to use this driver #####