CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面
文档中心 > GR5xx APP驱动用户手册/ 概述/ 驱动架构 Copy URL

驱动架构

外设驱动软件架构分为应用层(Application Layer,APP)驱动、硬件抽象层(Hardware Abstraction Layer,HAL)驱动和底层(Low Layer,LL)驱动。

下文简称为APP驱动、HAL驱动和LL驱动,架构图如下所示。

图 2 驱动架构

APP、HAL与LL层在软件架构上是相互关联的。APP驱动基于HAL驱动进行封装,接口主要实现外设常用功能,以便应用层调用。HAL层驱动通过调用LL层的内联函数实现对底层硬件的访问。

通常情况下,推荐用户使用APP层接口。

APP驱动

APP驱动基于HAL驱动把各外设常用的功能封装成一系列API接口,除具有HAL驱动的所有特点外,更稳定、安全、易用。开发者可直接使用这些接口编写应用程序而无需关心寄存器配置。

APP驱动主要具有以下特点:

  • 各外设基础参数统一定义,开发者只需配置基础参数,无需关心实现细节,可实现整个外设的初始化操作。
  • 提供轮询、中断和DMA方式传输接口,使用更灵活。
  • 支持自动睡眠管理,在MCU唤醒后无需再次初始化外设。
  • 自身维护状态管理,通过各接口返回值可快速确定外设当前状态。
  • 初始化可选择传入用户的中断回调函数,当中断事件触发,会调用用户中断回调函数。

APP驱动文件位于SDK包的SDK_Folder\drivers目录下。其中\inc目录下的头文件如app_xxx.h包含了该驱动的结构体申明和函数接口申明;\src目录下的源文件如app_xxx.c是对驱动函数的实现。

说明:

SDK_Folder为SDK的根目录。

APP层驱动文件的调用关系如下图所示。

图 3 APP驱动调用关系

HAL驱动

HAL驱动把各个外设所有功能封装成一系列简单的API接口,开发者利用这些接口可轻松实现底层外设硬件与上层应用程序的交互。

HAL驱动主要具有以下特点:

  • 驱动API可兼容同系列的芯片,部分芯片的特殊功能采用扩展API实现。
  • 多实例支持,API可在同一外设的多个实例(如I2C1、I2C2)中调用。
  • 可在外设初始化/反初始化API中调用用户回调函数,实现时钟、GPIO、中断、DMA的初始化/反初始化。
  • 可在外设中断事件或错误中调用回调函数,通知用户相应事件被触发。
  • 驱动中的阻塞处理采用超时机制实现,可避免程序死循环。

LL驱动

LL驱动通过内联函数的方式封装了各个外设寄存器的原子操作。因此,LL驱动比HAL驱动更接近硬件,可提供全面覆盖外设功能的API函数。开发者可采用LL驱动对HAL驱动无法覆盖到的外设功能进行配置。对于性能要求苛刻的应用场景,开发者可直接使用LL驱动。

LL驱动主要具有以下特点:

  • 采用内联函数实现,无函数调用开销。
  • 屏蔽了寄存器操作,可移植性高,易于复用。
  • 功能覆盖全面。

扫描关注

打开微信,使用“扫一扫”即可关注。