STM32LL库系列教程(一)—— LL库概览及资料

article/2025/8/26 16:54:21
 **开发平台**  :  正点原子  探索者STM32F407ZET6cube mx:V 5.1.0keil 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库应用场景
        • 2. LL库官方介绍
        • 3. LL库资料
        • 4. LL库的性能优势
        • 5. LL库的使用方法

1. LL库应用场景

用过STM32的朋友,对于标准库 STD库Standard Peripheral Libraries)和HAL库Hardware Abstraction Layer)应该都不会陌生。事实上,ST在推行HAL库的时候,逐渐停止了对于标准库的更新(新出的芯片以及不再提供标准库了),但他们也意识到了HAL库效率较低的问题,因此同时也推出了LLLow-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库的,两者完全兼容,所以适配上是不存在问题的。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/gZOmKcDO.shtml

相关文章

Linux命令`ll`的结果解析

下面是随便一个目录下的ll命令,显示的结果分为7个列。 第1列是文件类型加权限。 第一个字符为文件类型, d表示目录,l表示软连接,-表示文件,c表示字符设备文件。 后面的字符分为三组, 所有者u(…

linux命令中ll和ls的区别

Linux命令 ls 和 ll 的使用方法与基本区别 Linux 命令 ls 和 ll 的使用方法: 1.ll 罗列出当前文件或目录的详情信息,含有时间、读写权限、大小等信息 ,像Windows显示的详细信息。ll是“ls -l"的别名。相当于Windows里的快捷方式。可以…

特别行动队[斜率优化]

传送门 首先考虑暴力的DP sum(i--j) 可以用前缀和维护 把式子拆开 ...是一坨常数,这里省略了 我们令 yf[j]a*s[j]*s[j]-b*s[j] , xs[j] , k2*a*s[i] , bf[i] 把点绘制出来差不多是这样[注意斜率是负的] 数形结合来看,代码还是比较好写 #include<bits/stdc.h> #…

1911: [Apio2010]特别行动队

1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 4061 Solved: 1922 [ Submit][ Status][ Discuss] Description Input Output Sample Input 4 -1 10 -20 2 2 3 4 Sample Output 9 题解&#xff1a; 首先我们可以推出原始方程式&#xff1a;…

特别行动队题解

特别行动队题解 刷水题什么的最愉快了。 题意十分明了&#xff0c;就是选出一种分配方案将士兵分为若干组&#xff0c;使修正后的战斗力最大。 我们先可以写出暴力dp转移&#xff1a; 设\(f[n]\)为将前\(i\)个士兵分组&#xff0c;且第\(i\)个士兵为最后一组最后一个的最大战斗…

特别行动队

Solution 设 f[x] 表示特别行动队前 x 名士兵编好队的最大战斗力。 f[x]=maxi−1k=0fk+a[A(i)−A(k)]x+b[A(i)−A(k)]+c 化简、移项&#xff1a;得到斜率方程&#xff1a; f[k]−f[j]a[A2(k)−A2(j)]−b[A(k)−A(j)]>2aA(i)⋅[A(k)−A(j)] 然后就可以斜率优化了。 Co…

浅谈斜率优化(例题特别行动队)

题目描述 你有一支由 n n n名预备役士兵组成的部队&#xff0c;士兵从 1 1 1到 n n n编号&#xff0c;要将他们拆分 成若干特别行动队调入战场。出于默契的考虑&#xff0c;同一支特别行动队中队员的编号应该连续&#xff0c;即为形如 ( i , i 1 , . . . , i k ) ( i , i 1 …

numpy.meshgrid 用法说明

numpy.meshgrid(*xi, copyTrue, sparseFalse, indexingxy) return: X1, X2,..., XN 其中 *xi x1, x2,..., xn 都表示一维 array。 我们从下面这个简单的例子来看 meshgrid 做了什么&#xff1a; import numpy as npa np.array([2, 4, 8]) b np.array([3, 6])x, y np.mes…

MATLAB:Meshgrid用法

MATLAB-基础画图meshgrid - 知乎 (zhihu.com) 在MATLAB绘制三维曲面图或三维网格图时经常会用到meshgrid指令 比如&#xff1a;通常在确定向量x,y的基础上&#xff0c;使用meshgrid生成新的矩阵数据[X,Y],再输入函数Zf(X,Y),最后使用mesh或surf命令生成三维网格图或三维曲面图…

Python语言Numpy包之Meshgrid 函数

1 Meshgrid 函数的基本用法 在 Numpy 的官方文章里&#xff0c; meshgrid 函数的英文描述也显得文绉绉的&#xff0c;理解起来有些难度。可以这么理解&#xff0c; meshgrid 函数用两个坐标轴上的点在平面上画网格。 用法&#xff1a; [X,Y]meshgrid(x,y) [X,Y]meshgrid(…

matlab meshgrid函数

作用&#xff1a; 创建二维、三维矩阵 格式&#xff1a; [X,Y] meshgrid(x,y) [X,Y] meshgrid(x) [X,Y,Z] meshgrid(x,y,z) [X,Y,Z] meshgrid(x) eg: >> [x,y]meshgrid(1:1:3,5:1:6)x 1 2 31 2 3 y 5 5 56 6 6 …

【Numpy】 meshgrid()函数

np.mesharid()函数通常用来生成二维数据网格&#xff0c;例如一张灰度图片中长为x轴&#xff0c;宽为y轴&#xff0c;图中每一个像素点。 可以接受两个一维数组生成两个二维矩阵&#xff1a; np.meshgrid(np.arange(4),np.arange(4))我们生成的结果为&#xff1a; [array([[…

NumPy(十七):Meshgrid函数【应用场景:等高线、SVC中超平面的绘制】

一、Meshgrid函数 import numpy as np import matplotlib.pyplot as pltx np.linspace(0, 1, 5) y np.linspace(0, 1, 3) print("x ", x) print("-" * 50) print("y ", y) print("-" * 100)X, Y np.meshgrid(x, y) print("…

opencv-meshgrid

opencv-meshgrid 一句话描述 使用opencv::repeat函数和std::iota函数完成meshgrid功能。 小例程 cv::Mat Z cv::Mat::zeros(3, 5, CV_8UC1), X, Y;int x_length Z.cols, y_length Z.rows;std::vector<int> x(x_length);std::iota(x.begin(), x.end(), 1);X cv::re…

python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]

看一个简单的例子&#xff1a; 设有一个3阶方阵Z&#xff0c; 其值由式子x^2 y^2生成。 x的取值为4&#xff0c;5&#xff0c;6&#xff1b; y的取值为7&#xff0c;8&#xff0c;9。 按常规的思路应该是由两个循环生成方阵Z&#xff0c;即如下的代码&#xff1a; #!/usr/bin…

np.meshgrid()

目录 1.meshgrid函数介绍2.meshgrid函数官方说明 1.meshgrid函数介绍 参数&#xff1a; *xi&#xff0c;也就是x1&#xff0c;x2&#xff0c;…&#xff0c;xn &#xff1a;表示网格坐标的一维数组。 copy&#xff1a;默认为True&#xff0c;如果为False&#xff0c;就返回原始…

【matlab】meshgrid的使用

函数参数列表 [X,Y] meshgrid(x,y) [X,Y] meshgrid(x) [X,Y,Z] meshgrid(x,y,z) [X,Y,Z] meshgrid(x) meshgrid可以生成2D或者3D的矩阵&#xff0c; 如果为2D&#xff0c;矩阵的shape为&#xff08;y.length, x.length&#xff09; 如果为3D&#xff0c;矩阵的shape为&a…

np.meshgrid

np.meshgrid参考 官方文档给出的解释 Return coordinate matrices from coordinate vectors. Make N-D coordinate arrays for vectorized evaluations of N-D scalar/vector fields over N-D grids, given one-dimensional coordinate arrays x1, x2,…, xn. 参数 indexing : …

meshgrid方法

目录 meshgrid 绘制曲面图三维网络 meshgrid meshgrid 和 mesh 方法的差别在于是否会画出栅格线 绘制曲面图 生成绘制3D图形所需的网格数据。因为在计算机中进行绘图操作时&#xff0c;往往需要一些采样点&#xff0c;然后根据这些采样点来绘制出整个图形。 涉及到x、y这两组数…

matlab meshgrid作用,【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用

目录 背景 本博文主要分析 ndgrid&#xff0c; meshgrid是附送的&#xff0c;都是类似的东西&#xff0c;学会了一个&#xff0c;另一个很容易就理解了。 为什么会对 ndgrid 感兴趣呢&#xff1f;因为对它的不理解&#xff0c;导致我少写了几篇博文&#xff0c;最后&#xff0c…