HAL驱动程序旨在提供一组丰富的api,并方便地与应用程序上层交互。
每个驱动程序由一组功能组成,这些功能涵盖了最常见的外围设备功能。每个驱动程序的开发都是由一个公共API驱动的,这个API规范了驱动程序的结构、函数和参数名。
HAL驱动程序由一组驱动模块组成,每个模块都连接到一个独立的外围设备。然而,在某些情况下,模块与外围功能模式相连接。例如,USAT外围设备存在多个模块:UART驱动模块、USAT驱动模块、智能卡驱动模块和IrDA驱动模块。
HAL的主要特点如下:
跨系列可移植的一组api,包括常见的外围特性以及特定外围特性情况下的扩展api。
三种API编程模型:轮询、中断和DMA。
·API符合RTOS:
-完全可重入的API
-在轮询模式下系统地使用超时。
外设多实例支持,允许对给定外设的多个实例(USART1、USART2…)进行并发API调用
所有HAL api实现用户回调函数机制:
-外设初始化/去初始化HAL API可以调用用户回调函数来执行外设系统级初始化/去初始化(时钟、GPIO、中断、DMA)
-外设中断事件
-错误事件。
对象锁定机制:安全的硬件访问,以防止对共享资源的多个虚假访问。