标准外设库(STD库)、HAL库、LL库三者区别

2023-05-16

转自:https://blog.csdn.net/zcshoucsdn/article/details/54613202

  • 2018.1.19 HAL库详解见STM32之HAL库详解 及 手动移植

STM32 Embedded Software

  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。各库如下所示:
库
  其中,STD库和HAL库两者相互独立,互不兼容。几种库的比较如下:
库比较
  目前几种库对不同芯片的支持情况如下:
支持情况
上图中,LL库目前有部分芯片不支持,官方计划2017年逐步完善。

STM32Snippets

  它是代码示例的集合,直接基于STM32外设寄存器,可在文档和软件包中使用。由于处在最底层,因此需要开发者直接操作外设寄存器,对开发者要求比较高,通常针对于对汇编程序比较了解的资深嵌入式工程师!

注意:

  1. 目前只在STM32F0和L0系列中有提供
  2. 代码在不同ST芯片间没有可移植性

标准外设库(Standard Peripheral Libraries)

  标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。
  相对于HAL库,标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。

注意:不支持从STM32 L0,L4和F7开始的之后的STM32系列芯片

  ST为各系列提供的标准外设库稍微有些区别。例如,STM32F1x的库和STM32F3x的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32的标准外设库涵盖以下3个抽象级别:

  • 包含位,位域和寄存器在内的完整的寄存器地址映射
  • 涵盖所有外围功能(具有公共API的驱动器)的例程和数据结构的集合。
  • 一组包含所有可用外设的示例,其中包含最常用的开发工具的模板项目。

  关于更详细的信息,可以参考ST的官方文档,文档中对于标准外设库函数命名、文件结构等都有详细的说明。

STM32Cube

  ST为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。
  这其中就包含了HAL库和最近新增的LL库。如下图:
STM32Cube
  从上图不难看出,LL库和HAL库两者相互独立,只不过LL库更底层。而且,部分HAL库会调用LL库(例如:USB驱动)。同样,LL库也会调用HAL库
  用户可以使用STMCubeMX直接生成对应芯片的整个项目(目前主流开发工具的项目基本全支持),STMCubeMX负责给整理各种需要的源码文件。

注意:
  1. 个人感觉STMCubeMX生成的项目并不够简洁,源码的组织结构也并不是很好。
  2. STMCubeMX在生产项目时,可以选择使用HAL库或者LL库。但是部分组件的HAL库会调用LL库

HAL库

  HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。
  HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。 ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。
  可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。

  使用HAL库编程,最好尽量符合HAL库编程的整体架构。关于HAL库的详细介绍,可以参考后文 STM32 HAL库详解 及 手动移植

LL库

  LL库(Low Layer)是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,比如:在STM32F3x的HAL库说明文档中,ST新增了LL库这一章节,但是在F2x的HAL文档中就没有。
  LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:

  • 独立使用,该库完全独立实现,可以完全抛开HAL库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如USB,则会调用HAL库
  • 混合使用,和HAL库结合使用。

  LL库文件的命名方式和HAL库基本相同。个人感觉,LL库就是原来的标准外设库移植到Cube下的新的实现。因为使用LL库编程和使用标准外设库的方式基本一样。

        </div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准外设库(STD库)、HAL库、LL库三者区别 的相关文章

  • Fiddler 使用命令行和Filters

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 109020837 之前分享过一期 Fiddler断点 修改响应数据 xff0c
  • 代码改变生活-使用You-Get下载bilibili的视频【一】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 111307733 这篇分享是我在csdn的第100篇原创了 xff0c 真的是
  • Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 113868447 之前分享过 find element by android
  • 数据完整性测试之【三】Redis缓存和数据库表里的记录

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 119377944 前面分享过 接口返回值 和 表记录 的校
  • Python笔记【十一】

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 123655926 继续学习Python xff0c 继续更
  • Python脚本之准备测试环境的用户数据

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 127645678 这期是讲述下 我准备测试环境用户数据的经
  • 1114Selenium web自动化测试经验分享-设置网页超时加载时间set_page_load_timeout()

    最开始学习web自动化测试就遇到一个小困扰 xff0c 有时候设计的用例可能会打开新浪 腾讯这些网站 xff0c 等待网页加载完成都要小半分钟 最近重拾web自动化测试 xff0c 又遇到这个困扰 个人博客 xff1a https blog
  • 1127UI自动化测试经验分享-显式等待(一)WebDriverWait类、until()方法

    最近忙于其他事情 xff0c 博客就没那么多时间来写 原本想先分享下三种等待方式 xff0c 但是隐式等待我还有点不太懂 这次先分享显式等待 个人博客 xff1a https blog csdn net zyooooxie 一 xff09
  • OpenCV框架介绍

    OpenCV框架介绍 概述 OpenCV是一个开放源代码的计算机视觉应用平台 xff0c 由英特尔公司下属研发中心俄罗斯团队发起该项目 xff0c 开源BSD证书 xff0c OpenCV的目标是实现实时计算机视觉 xff0c xff0c
  • 1128UI自动化测试经验分享-显式等待(二)expected_conditions模块、visibility_of_element_located(locator)

    expected conditions模块 提供的预期条件判断类 模块包含一套预定义的条件集合 xff0c 大大方便了 WebDriverWait 的使用 个人博客 xff1a https blog csdn net zyooooxie 一
  • Requests.request()方法分享【一】

    最近参加了一次新公司测试团队技术分享会 xff0c 有大佬分享了关于接口自动化框架 python 43 requests 43 ddt 43 unittest 43 jenkins xff0c 印象很深刻的是他的脚本测试用例的设计和requ
  • 指针 Swap交换函数

    64 努力的张张 的C 练习 数组 指针地址传递 Swap函数 首先 xff0c 我们先来看一下普通值传递和地址传递的区别 函数间普通值传递 上代码 xff1a span class token macro property span cl
  • 用两个栈实现一个队列【C语言】

    问题描述 xff1a 考虑用两个栈实现队列这样的特殊结构 问题分析 xff1a 我们靠两个栈实现队列 xff0c 肯定是一个用来存放入队的数据 xff0c 一个用来出栈 xff0c 在这里我们主要关注这个样几个问题 xff1a 什么时候队列
  • 数据库安全 --- 创建登录名 用户+配置权限【笔记】

    项目场景 xff1a 创建用户和给用户授权 解决方案 xff1a 1 创建用户 至此用户才创建成功 xff1a 2 配置权限 把查询Student表权限授给用户test xff1a 把对Student表和Course表的全部权限授予用户U2
  • Visual C++6.0 一些编译链接报错解决

    01 VC 43 43 编写图形化界面链接时出现 LIBCD lib crt0 obj error LNK2001 unresolved external symbol main 的解决方案 在我使用VC 43 43 编写一个图形化显示界面
  • lambda表达式【C++】

    lambda表达式 lambda表达式是C 43 43 11最重要也是最常用的一个特性 lambda来源于函数式编程的概念 优点 xff1a 声明式编程风格 xff1a 就地匿名定义目标函数或函数对象 xff0c 不需要额外写一个命名函数或
  • Qt学习笔记 day_03

    目录 十三 自定义代理类的实现1 基于QSpinBox的自定义代理类的实现2 自定义代理类的使用3 xff09 setItemDelegateForColumn 函数的使用注意 十三 自定义代理类的实现 1 基于QSpinBox的自定义代理
  • 版本控制软件SVN

    SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要 xff0c 控制软件的修改 xff0c 减少混乱 xff0c 提高软件生产效率 xff0c 其是软件质量保证的重要环节软件配置管理是对软件修改进行标识 组织和控
  • 螺旋桨的制作图文教程

    一 螺旋桨的一些基础概念 当我们把螺旋桨看成是一个一面旋转一面前进的机翼时 xff0c 就能借助已知的空气动力学常识 xff0c 直观地理解螺旋桨的基本工作原理 1 xff0e 桨距 动力桨距和几何桨距 桨距 xff1a 从广义而言 xff
  • 自制2.4G ELRS接收机,不需要打板,容易制作

    制作难度 xff1a 中等 xff0c 主要是器件太小 xff0c 焊接需要耐心 一 硬件材料 1 LoRa射频模块 xff0c sx1280 xff1a E28 2G4M12S 2 MCU Wifi模块 xff1a ESP 01F 3 各

随机推荐

  • Qt学习笔记 【C++】(4)

    目录 一 Qt中的C 43 43 11标准二 Explicit Linking 和 Implicit Linking三 自动生成的ui xxx ui文件四 常用快捷键 一 Qt中的C 43 43 11标准 Qt 5 中开启C 43 43 1
  • 串口发送接收字符串的C语言代码参考

    通过串口把字符串数据从单片机U1发送到单片机U2 xff0c 通过U2的LCD602显示出来 LCD602显示代码是用的一个比较不错的现成的显示代码 单片机串口传字符串 xff0c 主要是利用字符串的格式的特点 xff0c 在传输中结束串口
  • HTTP协议解析

    HTTP概述 HTTP 全称为 34 超文本传输协议 34 是一种应用非常广泛的应用层协议 我们平时打开一个网站 就是通过 HTTP 协议来传输数据的 HTTP工作过程 xff1a 当我们在浏览器中输入一个 34 网址 34 xff0c 此
  • 《算法导论》学习心得

    第四章 分治策略 xff08 1 xff09 Master Method中case 3中 正则条件 的含义 xff1a 保证f n 在每次递归后都比上一层小 xff08 非递增 xff09 否则显然T n gt f n xff08 2 xf
  • 《算法导论》 第11章部分答案

    注 xff1a 以下答案均为自己思考 xff0c 难免有误 xff0c 欢迎指正 11 3 1 xff1a 将长度为n的链表进行排序 xff0c 将关键值的散列值相同的元素排为相邻 而散列表有点类似于链接法解决冲突的散列表 11 3 2 x
  • 算法刷题心得:动态规划 scramble-string

    牛客网 gt 在线编程 gt letcode gt scramble string Given a string s1 we may represent it as a binary tree by partitioning it to t
  • POJ 1635 Subway tree systems

    题目 xff1a Some major cities have subway systems in the form of a tree i e between any pair of stations there is one and o
  • Openwrt添加定制一个软件包

    我深知前路风雨 xff0c 但我依然微笑前行 Openwrt的Makefile流程异于一般常用的Makefile xff0c 阅读起来难度太大 但是我么可以先通过如何使用 修改Makefile开始 xff0c 从Makefile的某个局部开
  • 无人机通信(WiFI/3G/4GLTE)

    无人机通信 xff08 WiFI 3G 4GLTE xff09 DJI 大疆创新的无人机可实时操控执行各项任务 Phantom3 还内置了全新的 Lightbridge 高清图传系统 xff0c 使飞机所拍摄的实时图像可远距离传输到移动设备
  • realsense D430 python采集深度图像,并保存为txt及pcd点云,用于open3D后处理

    D430点云是x y z 将realsense D430保存的点云文件 pcd 需要对数据进行处理 废话不多说 直接上代码 span class token comment coding utf 8 span span class toke
  • 隐藏符号 __dso_handle 问题

    这几天要给项目做移植 xff0c 重写了下Makfile 项目原是使用autoconf配置的 xff0c 但在新环境下对autoconf的支持不好 Makefile编写基本按autoconf生成的Makefile来的 xff0c 编译选项等
  • 类模板成员函数

    模板类的头文件 span class token macro property span class token directive hash span span class token directive keyword ifndef s
  • C++ 在.h文件中包含头文件和在.cpp文件中包含头文件的原则

    1 第一个原则 xff1a 如果可以不包含头文件 xff0c 那就不要包含了 xff0c 这时候前置声明可以解决问题 如果使用的仅仅是一个类的指针 xff0c 没有使用这个类的具体对象 xff08 非指针 xff09 xff0c 也没有访问
  • NRF24L01数据通信C程序

    NRF24l01 产品性能 xff1a 1 xff09 2 4GHZ全球开放ISM频段免许可使用 2 xff09 最高工作速率2Mbps GFSK高效调制 3 xff09 125个频道满足多点通讯和跳频通讯需求 4 xff09 1 9 3
  • gazebo仿真之xacro文件

    span class token operator lt span span class token operator span xml version span class token operator 61 span span clas
  • c++ 释放内存 野指针

    在释放内存之时 xff0c 不仅仅是将该块内存进行释放 xff0c 还要将指向该块内存的指针置为NULL 如果不置为NULL xff0c 下次继续使用该指针时会出现问题 具体看示例 在下面的示例中 xff0c 如果没有处理野指针的那句话 x
  • 二维码识别 -- 基于ros平台下的仿真

    生活中的二维码 二维码是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间的图形记录数据符号信息的 xff1b 在代码编制上巧妙地利用构成计算机内部逻辑基础的 0 1 比特流的概念 xff0c 使用若干
  • ROS中控制机械臂抓取目标例程

    在上一个博文中介绍了一个简单的目标识别的例子 xff0c 在这篇博客中 xff0c 例如是别的结果 xff0c 完成机械臂的抓取控制 xff0c 主要进行程序的分析和学习 包含的头文件 xff1a include lt ros ros h
  • STM32_Debug 使用ST-Link进行调试出现Error:Flash Download Failed-"Cortex-M3" 解决方案

    在Debug窗口依次注意以下几个点 xff1a 1 选择与主控芯片相配套的芯片 2 选择ST Link Debugger 此处注意该页面最下面一行可不更改 xff08 亲测有效 xff09 3 接上图点击进入Setting xff0c 依次
  • 标准外设库(STD库)、HAL库、LL库三者区别

    转自 xff1a https blog csdn net zcshoucsdn article details 54613202 2018 1 19 HAL库详解见STM32之HAL库详解 及 手动移植 STM32 Embedded Sof