**开发平台** :
正点原子 探索者STM32F407ZET6
cube mx:V 5.1.0
keil uVision5
项目地址:
github : https://github.com/liliang1918/STM32LL
码云 :https://gitee.com/liang1918/stm32_ll_library
注意:
本教程默认读者已经对stm32和cubemx软件有一定了解;
为节省篇幅,详细配置cubemx的步骤仅在此篇中说明,以后仅会简略介绍配置相关内容。
STM32LL库系列教程(一)———— LL库概览及资料
总体介绍LL库的优势及资料获取
系列教程目录
STM32LL库系列教程(一)—— LL库概览及资料
STM32LL库系列教程(二)——点亮LED灯
STM32LL库系列教程(三)——串口中断
STM32LL库系列教程(四)——外部中断
STM32LL库系列教程(五)——定时器中断
(这个系列暑假期间正在完善,所以有的链接打不开是因为文章还是草稿状态,见谅!)
1. LL库应用场景
用过STM32的朋友,对于标准库 STD库(Standard Peripheral Libraries)和HAL库(Hardware Abstraction Layer)应该都不会陌生。事实上,ST在推行HAL库的时候,逐渐停止了对于标准库的更新(新出的芯片以及不再提供标准库了),但他们也意识到了HAL库效率较低的问题,因此同时也推出了LL( Low-layer )库。
所以,当我们针对一些低性能(M0)或者低功耗(L系列)的芯片编程时。相较于HAL库的低效率,寄存器操作的复杂,标准库的逐渐淘汰。LL库就成为了替代HAL库一个比较好的选择了。
2. LL库官方介绍
为了准确介绍LL库的大致内容,笔者从HAL&LL F1的官方手册(Description of STM32F1 HAL and Low-layer drivers)中截取部分内容并附上翻译
低层驱动程序概述低层(LL)驱动程序旨在提供快速的轻量级面向专家的层,
该层比HAL更接近硬件
。与HAL相反,对于优化访问权限不是关键功能的外围设备,或需要大量软件配置和/或复杂上层堆栈(例如FSMC,USB或SDMMC)的外围设备,则不提供LL API。
LL驱动程序功能: ·
- 一组函数,用于根据数据结构中指定的参数初始化外围主要功能
- 一组函数,用于用每个字段的重置值填充初始化数据结构
- 执行外围设备反初始化的功能(外围设备寄存器恢复为默认值)
- 一组内联函数,用于直接和原子寄存器访问
- 由于LL驱动程序可以在独立模式下(无HAL驱动程序)或在混合模式下(有HAL驱动程序)使用,因此与HAL完全独立
- 全面介绍了支持的外围功能。
低层驱动程序根据STM32外设的可用功能提供硬件服务。这些服务恰好反映了硬件功能,并提供了一次操作,必须遵循微控制器产品线参考手册中描述的编程模型进行调用。结果,LL服务不执行任何处理,并且不需要任何其他内存资源来保存其状态,计数器或数据指针:所有操作都是通过更改关联的外设寄存器的内容来执行的。
LL库的手册翻译,我会再出一篇博客。以上为简单介绍
3. LL库资料
LL库的手册基本是放在HAL库手册中的,作为HAL库的一个补充。笔者已经找到了STM32各系列型号对应的HAL&LL库的官方手册。链接如下:
链接:https://pan.baidu.com/s/1PuUF4x780O-ZDjvqK_Z5gg
提取码:ldqd
4. LL库的性能优势
上图转载自
STM32使用HAL库、标准库、LL库和寄存器操作的性能对比_u014519486的博客-CSDN博客_hal库 寄存器
https://blog.csdn.net/u014519486/article/details/102800532
可见,相较于HAL库而言,LL库的效率是有极大提升的。这一点,在使用LL库编译代码时,就可以明显感觉到速度的提升
5. LL库的使用方法
与HAL库相同,LL库同样支持CUBEMX生成代码,非常方便。并且,在cubemx工程中,不同外设是可以混合使用HAL和LL库的,两者完全兼容,所以适配上是不存在问题的。