STM32 HAL库和LL库的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 HAL库和LL库的区别相关的知识,希望对你有一定的参考价值。
上次开发一个项目,使用一个小容量的STM32 ARM CORTEX核心的单片机,使用STM32CUBEMX自动生成配置代码,正准备编写程序的时候,发现容量竟然有6K多。这个容量在使用大容量FLASH的单片机时不感到什么,可是使用小容量单片机的时候,就明显不够用了。
没有办法,只好打算回去使用原来的StdLib库,前两年不就这么干的嘛,也没什么难的。可是回头找对应库的时候,发现悲剧了,没有这个序列的标准库。
这也难不倒我们老司机!我就从HAL库里面把必须的寄存器语句摘出来,把冗余的有效检验和冲突处理去掉,不就精简下来了么,就这么干!
打开“Drivers\STM32F0xx_HAL_Driver\Src”的目录,突然发现除了一般常用的“stm32f0xx_hal_”开头的文件,还有“stm32f0xx_ll_”开头的文件,这是什么鬼?!而且这两种文件都是一一对应的,每个模块,GPIO, RCC, CRC, DMA,... ,都有对应的文件。打开看看,跟hal的一对比,发现精简很多。
我一下子精神了,意识到这是一个精简的库。于是上网查资料,终于查到了,这是STM32Cube LL库,看起来比较新,似乎是ST最近推出来的。
看上表也发现它的优化性(内存和MIPS)好很多,只是产品线覆盖还没有全,但我需要的系列是有的。
于是,果断用它,并做了一下小小的对比。
我使用一款16k的单片机,配置的时候把UART, ADC, GPIO功能打开,分别用HAL库和LL库生成后,使用KEIL 5进行编译,做了对比。
以下是芯片配置:
以下是编译后的代码对比:
HAL库 | Program Size: Code=5376 RO-data=232 RW-data=8 ZI-data=1232 |
LL库 | Program Size: Code=1804 RO-data=232 RW-data=4 ZI-data=1028 |
是不是相当震撼,编译后LL库只有HAL库的33%体积。
太完美了,于是我使用LL库完成了剩余的编程工作。LL库基本是基于寄存器的操作,有的模块需要再自己再配置一下。比如Systick在使用STM32CUBEMX之后并不运行,需要Enable一下,并把IRQ打开。
LL库的选择,在STM32CUBEMX中,点击菜单的“Project”-->“Settings”,在下面的界面中选择“Advanced Settings”,然后在每个模块后面选择使用的库。
以上是关于STM32 HAL库和LL库的区别的主要内容,如果未能解决你的问题,请参考以下文章
STM32 HAL库标准外设库LL库(STM32 Embedded Software)
STM32 HAL库标准外设库LL库(STM32 Embedded Software)