4.2.2 HAL库文件的数据结构
每个HAL驱动程序包含外设句柄数据结构、初始化和配置数据结构、特殊处理的数据结构。
1.外设句柄数据结构
句柄是在HAL驱动程序中实现的主要结构。它处理外围设备/模块配置,并注册和嵌入所有需要遵循外围设备流程的结构和变量。外设句柄的作用如下。
(1)多实例支持。每个外设/模块实例都有自己的句柄,因此实例资源是独立的。
(2)外围进程相互通信。句柄用于管理进程和例程之间的共享数据资源,如全局指针、DMA句柄、状态机。
(3)存储。句柄也用于管理给定HAL驱动程序中的全局变量。
外设模块串口USART的句柄示例如下。

如用UART_HandleTypeDef UartHandle,UartHandle就被定义为USART1的句柄,它贯穿USART1收发的整个流程,在初始化串口、开启串口接收/中断时均需要用到,例如:(https://www.daowen.com)

对于公共资源和系统外设,不使用句柄或实例对象,包括GPIO、SysTick、NVIC、PWR、RCC、Flash等资源在应用中不使用句柄。
2.初始化和配置数据结构
初始化和配置数据结构是指具体配置各外设模块的参数,是对用户开放的,如串口需要配置波特率、数据宽度、停止位、校验方式等,其数据结构如下。

3.特殊处理的数据结构
特殊处理的数据结构用于特定的程序(公共API),它们是在通用驱动程序头文件中定义的,例如:
