【前言】
最近跟大佬们讨论了一下HAL与LL库的话题,于是我对比了一下两个最基本的GPIO的基本固件,现分享如下:
【硬件环境】
stm32U083RC
【软件环境】
1、stm32cubeIDE。
2、MDK3.58
【实验方法】
使用官方的示例,分别编译HAL库与LL库,比较生成的代码大小。
如上两图所示,分别记录不同IDE,以编译结果,记录编译的各项点用空间。
【实验结果】
HAL库 | stm32CubeIDE | HAL库 | |||||||
code | RO-dat | RW-data | Zi-data | text | data | bss | dec | ||
MDK | 4270 | 290 | 12 | 1660 | 6108 | 12 | 1588 | 7708 | |
LL库 | HAL库 | ||||||||
code | RO-dat | RW-data | Zi-data | text | data | bss | dec | ||
1548 | 224 | 4 | 1636 | 2512 | 4 | 1564 | 4080 | ||
差 | 2722 | 66 | 8 | 24 | 3596 | 8 | 24 | 3628 |
【分析讨论】
从上表可以看出,MDK的环境下,固件只是HAL库的三分之一,STM32CubeIDE下面,也只有一半。使用LL库在运行速度、耗电方面会有很大差异。
HAL库可以在stm32平台移植方便,添加了很多适配不同的芯片,所以代码会多,而LL库是直接对寄存器的操作,就比较简单,正所谓鱼与熊掌不可兼得。在FLASH比较紧张的芯片上,使用LL库会有比较大的优势。