打印
[应用相关]

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

[复制链接]
921|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  它是代码示例的集合,直接基于STM32外设寄存器,可在文档和软件包中使用。由于处在最底层,因此需要开发者直接操作外设寄存器,对开发者要求比较高,通常针对于对汇编程序比较了解的资深嵌入式工程师!
注意:
  • 目前只在STM32F0和L0系列中有提供
  • 代码在不同ST芯片间没有可移植性

标准外设库(Standard Peripheral Libraries)
  ST为各系列提供的标准外设库稍微有些区别。例如,STM32F1x的库和STM32F3x的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32的标准外设库涵盖以下3个抽象级别:
  • 包含位,位域和寄存器在内的完整的寄存器地址映射
  • 涵盖所有外围功能(具有公共API的驱动器)的例程和数据结构的集合。
  • 一组包含所有可用外设的示例,其中包含最常用的开发工具的模板项目。

  ST为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。
  这其中就包含了HAL库和最近新增的LL库。如下图:

  从上图不难看出,LL库和HAL库两者相互独立,只不过LL库更底层。而且,部分HAL库会调用LL库(例如:USB驱动)。同样,LL库也会调用HAL库
  用户可以使用STMCubeMX直接生成对应芯片的整个项目(目前主流开发工具的项目基本全支持),STMCubeMX负责给整理各种需要的源码文件。
注意:
  1. 个人感觉STMCubeMX生成的项目并不够简洁,源码的组织结构也并不是很好。
  2. STMCubeMX在生产项目时,可以选择使用HAL库或者LL库。但是部分组件的HAL库会调用LL库
HAL库
  使用HAL库编程,最好尽量符合HAL库编程的整体架构。关于HAL库的详细介绍,可以参考后文 STM32 HAL库详解 及 手动移植
LL库
  LL库文件的命名方式和HAL库基本相同。个人感觉,LL库就是原来的标准外设库移植到Cube下的新的实现。因为使用LL库编程和使用标准外设库的方式基本一样。

6128364741388e44fd.png (70 KB )

6128364741388e44fd.png

141566474138fee5ee.png (34 KB )

141566474138fee5ee.png

340656474139681e92.png (54.46 KB )

340656474139681e92.png

使用特权

评论回复
沙发
海滨消消| | 2023-5-30 11:00 | 只看该作者
LL库没怎么了解

使用特权

评论回复
板凳
adolphcocker| | 2023-6-7 13:20 | 只看该作者
HAL库使用起来相对较简单,但是会增加代码量。

使用特权

评论回复
地板
jonas222| | 2023-6-8 13:42 | 只看该作者
LL库提供对芯片底层寄存器的访问和操作,可以实现最精细的控制和优化,适合用户想要深入了解芯片底层细节、自己编写驱动程序的情况。

使用特权

评论回复
5
sesefadou| | 2023-6-14 09:33 | 只看该作者
STM32 的 HAL 库好用吗

使用特权

评论回复
6
51xlf| | 2023-6-14 10:49 | 只看该作者
标准外设库是开发STM32比较经典的库

使用特权

评论回复
7
iyoum| | 2023-6-14 13:53 | 只看该作者
标准外设库:SPL是ST公司推出的第一个针对STM32系列芯片的库,包含了大量的函数和驱动程序,可以方便地进行芯片外设的配置和控制。SPL库支持广泛,但是不再更新维护。

使用特权

评论回复
8
i1mcu| | 2023-6-14 14:32 | 只看该作者
标准库3.5之后已经不再更新了,有些新出的芯片已经不支持标准库了

使用特权

评论回复
9
bestwell| | 2023-6-14 14:44 | 只看该作者
对于初学者来说,HAL库使用起来相对简单,可以先从它入手;对于有一定经验的工程师来说,可能更喜欢LL库的精细控制和优化特性。

使用特权

评论回复
10
robincotton| | 2023-6-14 19:21 | 只看该作者
HAL库更加高级和通用化,在不同型号的芯片中可以通用,且适用于多种开发工具链。

使用特权

评论回复
11
MessageRing| | 2023-6-14 22:35 | 只看该作者
标准库已经停更了,但是学习标准库是最容易理解底层原理的

使用特权

评论回复
12
minzisc| | 2023-6-15 22:40 | 只看该作者
HAL 库相对标准库更加复杂更加繁琐

使用特权

评论回复
13
sdlls| | 2023-6-16 22:35 | 只看该作者
库函数不同               

使用特权

评论回复
14
AloneKaven| | 2023-6-17 23:14 | 只看该作者
hal库更方便移植

使用特权

评论回复
15
Jacquetry| | 2023-6-18 22:38 | 只看该作者
LL库比HAL库更接近底层

使用特权

评论回复
16
janewood| | 2023-6-19 12:55 | 只看该作者
HAL库(STM32Cube)有点类似面向对象的库,里面封装了很多东西

使用特权

评论回复
17
alvpeg| | 2023-6-21 13:53 | 只看该作者
HAL库是官方推广的,比如cubeMx生成的底层都是Hal库。两者底层有些是相同的都是操作寄存器

使用特权

评论回复
18
yeates333| | 2023-6-21 15:21 | 只看该作者
这三个库各有特点和适用场景。选择哪个库取决于项目需求和开发者的个人偏好。

使用特权

评论回复
19
LLGTR| | 2023-6-21 15:23 | 只看该作者
以前用标准库,现在用HAL库。

使用特权

评论回复
20
朝生| | 2023-6-21 15:23 | 只看该作者
LL库比较适合那些内存比较小的单片机。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

402

主题

10665

帖子

6

粉丝