本帖最后由 caizhiwei 于 2021-3-19 23:21 编辑
最近在库上面选择了很久,尝试了几个历程,发现HAL库繁琐,效率低下,比如,一个简单地 中断搞的很复杂。再说说CubeMX吧,也不是什么省油的灯,仅仅只能生成初始化代码而已,生成之后然后如何操作,也没有历程,还不如之前的STD库,每个外设都有2~3个功能OK的历程,移植修改也是很爽的。
不像CubeMX,配置去配置来,最后main.c还被覆盖了,哎。
LL库(Low Layer)是 ST 最近新增的库,与 HAL 库捆绑发布,文档也是和 HAL 库文档在一起的,比如:在STM32F3x 的 HAL 库说明文档中,ST 新增了LL库这一章节,但是在 F2x 的HAL文档中就没有。
LL 库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:
1.独立使用,该库完全独立实现,可以完全抛开 HAL 库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如 USB,则会调用 HAL 库
2.混合使用,和 HAL 库结合使用。
目前,CubeMX 在生成项目时,可以选择采用 LL 库。
LL 库文件的命名方式和 HAL 库基本相同。个人感觉,LL 库就是原来的标准外设库移植到 Cube下的新的实现,但是其实现方法更加高效、简洁。使用 LL 库编程和使用标准外设库的方式基本一样,但是确会得到比标准外设库更高的效率。
最终,我选择用LL库,让我又回到了STD库但感觉,编译很快,生成的代码尺寸很小!
我们可以先看看对比:
可见,相较于HAL库而言,LL库的效率是有极大提升的。这一点,在使用LL库编译代码时,就可以明显感觉到速度的提升。
LL库的使用方法与HAL库相同,LL库同样支持CUBEMX生成代码,非常方便。并且,在cubemx工程中,不同外设是可以混合使用HAL和LL库的,两者完全兼容,所以适配上是不存在问题的。
这就是demo代码,LL库如此简单。
打包整理整个工程,见附件。
MDK_STM32G4_LED.rar
(36 KB)
|