历史上的今天
返回首页

历史上的今天

今天是:2025年08月05日(星期二)

正在发生

2019年08月05日 | STM32 之一 HAL库、标准外设库、LL库

2019-08-05 来源:eefocus

STM32 Embedded Software

  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。各库如下所示:

库

  其中,STD库和HAL库两者相互独立,互不兼容。几种库的比较如下:

库比较

  目前几种库对不同芯片的支持情况如下:

支持情况

上图中,LL库目前有部分芯片不支持,官方计划2017年逐步完善。


STM32Snippets

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


注意:


目前只在STM32F0和L0系列中有提供

代码在不同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库编程和使用标准外设库的方式基本一样。

推荐阅读

史海拾趣

Advanced Milliwave Laboratories Inc公司的发展小趣事

随着全球电子市场的不断发展和竞争的加剧,AML开始实施全球化战略布局。公司在全球范围内设立了多个分支机构和销售网络,进一步拓展市场。同时,AML还加强了与国际同行的交流与合作,共同推动微波技术的发展和应用。展望未来,AML将继续致力于技术创新和市场拓展,努力成为全球微波技术领域的领导者。

这五个故事展示了Advanced Milliwave Laboratories Inc公司在电子行业中的发展历程和成就,凸显了其在技术创新、市场拓展、质量管理以及全球化战略等方面的努力和成果。

ETI Systems公司的发展小趣事

ETI Systems公司自创立之初,就专注于研发具有创新性的电子产品和解决方案。在公司发展的早期,它推出了一款高性能的无线通信设备,该设备采用了当时最先进的信号处理技术,极大地提升了数据传输的效率和稳定性。这一创新产品不仅帮助ETI Systems在市场上获得了良好的口碑,也引领了整个行业的技术发展方向。

ECS公司的发展小趣事

ECS公司成立于XXXX年,由一群热衷于云计算技术的工程师创立。在创立初期,公司就明确了以提供高效、弹性的云服务为目标。他们深入研究了虚拟化技术、自动化管理等关键技术,成功推出了ECS服务,为客户提供按需分配的计算资源。这一创新的服务模式迅速吸引了众多客户的关注,ECS公司开始在云服务市场崭露头角。

HELUKABEL公司的发展小趣事

随着云计算技术的不断发展,ECS公司意识到只有不断创新才能保持竞争优势。他们投入大量研发资源,对ECS服务进行了多次技术升级和产品优化。例如,他们引入了智能调度算法,实现了计算资源的自动分配和负载均衡;同时,他们还加强了数据安全性和隐私保护措施,确保客户的数据安全。这些技术突破和产品升级使得ECS公司的服务更加稳定、可靠和高效。

ELMOS公司的发展小趣事

近年来,中国市场对汽车电子产品的需求不断增长,为ELMOS提供了广阔的发展空间。为了抓住这一发展机遇,ELMOS不断加大在中国的投入力度,扩大其在中国市场的规模和影响力。通过与国内汽车制造商和合作伙伴的深入合作,ELMOS在中国市场取得了显著的成果,并为公司未来的持续发展奠定了坚实的基础。

以上五个故事分别从不同角度展示了ELMOS公司在电子行业中的发展历程和成就。这些故事不仅体现了ELMOS的技术实力和市场竞争力,也展示了公司在全球化和国际化方面的努力和成果。

AIM - American Iron and Metal公司的发展小趣事

随着国内市场的饱和,AIM开始寻求海外市场的拓展。公司制定了详细的国际化战略,通过参加国际展览、建立海外销售渠道等方式,逐步打开了欧美、东南亚等地区的市场。AIM的产品质量和技术水平得到了国际客户的认可,出口额逐年攀升。

问答坊 | AI 解惑

MDK中国版例程服务包

服务包大小:50.5M 下载地址:http://www.realview.com.cn/down-list.asp?id=611 RealView MDK 3.24下载地址:http://www.realview.com.cn/down-list.asp?id=610 使用说明:将MDK中国版例程服务包解压到MDK的安装目录下C:\\Keil\\ARM覆盖即可 B ...…

查看全部问答>

这句话怎么翻译啊!关于ucos的!

Note that the port described in this application note applies to both ARM7 and ARM9 processors and you can use this port for both ARM and Thumb-based applications. Previous ports either worked in ARM-mode or in Thumb-mode. This po ...…

查看全部问答>

SD CARD READ

读64M SD CARD ,正确读出从address39 后的512个字节!(可以读出结束标志0x55,0XAA,文件分区类型等等2 G 的SD CARD 只是读到address0后512字节(可以读出结束标志0x55,0XAA,总的扇区数,开始扇区结束扇区等)但是怎样才能读到他的FAT地址,根目 ...…

查看全部问答>

gprs modem在拨号后到IPCP阶段的问题请教

GPRS在IPCP协商之后的这一帧是什么帧? GPRS端:7E 80 21 01 07 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 66 F8 7E                 GGSN端:7E 80 21 03 07 00 16 0 ...…

查看全部问答>

wince下滚动播放文字广告视频广告就不能播放!

     情况如下:Wince4.2下做了一个窗体,在不同的子控件下实现不同的功能,已在一控件上实现播放视频广告。现在在另子控件上实现滚动文字广告,播放文字广告是重新开启了一个子线程,这个播放文字广告的子线程启动后视频广告 ...…

查看全部问答>

Wince 下如何注册组件---------------------------------------------------up有分

问题1,wince下注册的组件,在注册表中哪些地方有信息 问题2,regsvr32在Wince下如何用,我这边定制了一个regsvr32程序,不知如何运行,运行后就消失,      有谁知道怎么用命令行方式注册吗。 问题3,我自己在evc上有了个注 ...…

查看全部问答>

急求霍尔开关的应用电路!!!

小弟正在弄霍尔器件,望各位达人能给个电路…

查看全部问答>

共模和差模干扰信号(续1)

关于上述各式各样的EMI信号对电子设备的影响,可用图1.3所示的单相供电系统模型来说明。其中把相线(L)与地(E)和中线(N)与地(E)之间存在的EMI信号称之为共模干扰信号,即图1.3 的电压U1和U2。对于L、N线而言,共模干扰信号可视为在L和N线 ...…

查看全部问答>

80C52proteus(从流水灯~~ds18b20)程序和仿真图一起

自己学习单片机时,总结出来的,希望给需要的人一些帮助…

查看全部问答>