《嵌入式-STM32开发指南》第一部分 入门篇 - 第7章 STM32固件库与STM32Cube产品介绍

发布者:温暖阳光最新更新时间:2024-12-17 来源: elecfans关键字:STM32  固件库  STM32Cube 手机看文章 扫描二维码
随时随地手机看文章

自STM32标准库出道以来,备受广大工程师和公司的喜爱,但是,从2013年开始,ST逐渐停止了对标准外设库的更新和维护。目前,ST全力推崇HAL库,STM32Cube就是与HAL库配合使用图形化编程官方IDE。


7.1 STM32库简介

到目前为止,ST有标准外设库(SPL 库)、HAL 库、LL 库 三种。前两者都是常用的库,后面的 LL 库是 ST 最近才添加,随 HAL 源码包一起提供,目前支持的芯片也偏少。各库如下所示:

图1 标准库、HAL 库、LL 库对比.png?imageView2/2/w/1000

其中,SPL 库 和 HAL 库两者相互独立,互不兼容。几种库的比较如下:

图2各个库对比.png?imageView2/2/w/1000

目前几种库对不同芯片的支持情况如下:

图3.png?imageView2/2/w/1000

ST 中文官网上有一篇《STM32库函数性能对比》的文章,其中对比了各种库的性能如下:

图4 ST各库性能对比.png?imageView2/2/w/1000

7.1.1标准外设库简介

标准外设库(Standard Peripherals Library)是对 STM32 芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的 ST 库。几乎全部使用 C 语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。STM32F1系列的版本停留在3.5.0,这个版本也许是大家最熟悉的版本。

图5标准外设库支持程度.png?imageView2/2/w/1000

标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了 C 函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。虽然标准外设库对各外设的进行了一次封装,而不是仅仅局限在对寄存器的封装。实现了各外设的基本操作接口。

标准外设库的文件基本架构并不复杂。下图显示了 STM32F10xx 标准外设库文件的基本架构

图6.png?imageView2/2/w/1000

ST 为各系列提供的标准外设库稍微有些区别。例如,STM32F1x 的库和 STM32F3x 的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32 的标准外设库涵盖以下 3 个抽象级别:

  包含位,位域和寄存器在内的完整的寄存器地址映射
   涵盖所有外围功能(具有公共API的驱动器)的例程和数据结构的集合。
   一组包含所有可用外设的示例,其中包含最常用的开发工具的模板项目。

7.1.2 HAL库简介

HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。

HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。 ST 制作的中间件堆栈(USB 主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在 ST 公司的 MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。

图7 HAL库支持的中间件.png?imageView2/2/w/1000

目前,结合HAL库,ST对其产品线构建的软件架构如下图所示。

图8 HAL库软件架构.png?imageView2/2/w/1000

7.1.3 LL库简介

LL库(Low Layer)是 ST 最近新增的库,与 HAL 库捆绑发布,文档也是和 HAL 库文档在一起的,比如:在STM32F3x 的 HAL 库说明文档中,ST 新增了LL库这一章节,但是在 F2x 的HAL文档中就没有。

LL 库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:

  独立使用,该库完全独立实现,可以完全抛开 HAL 库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如 USB,则会调用 HAL 库
   混合使用,和 HAL 库结合使用。

目前,CubeMX 在生成项目时,可以选择采用 LL 库。
LL 库文件的命名方式和 HAL 库基本相同。个人感觉,LL 库就是原来的标准外设库移植到 Cube下的新的实现,但是其实现方法更加高效、简洁。使用 LL 库编程和使用标准外设库的方式基本一样,但是确会得到比标准外设库更高的效率。

7.2 STM32Cube简介

ST 为新的标准库注册了一个新商标:STMCube™。并且,ST专门为其开发了配套的桌面软件 STMCubeMX,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。

图9.jpg?imageView2/2/w/1000

这其中就包含了 HAL 库和最近新增的 LL 库。如下图:

图10.png?imageView2/2/w/1000

从上图不难看出,LL 库和 HAL 库两者相互独立,只不过 LL 库更底层。而且,部分 HAL 库会调用LL库(例如:USB驱动)。同样,LL 库也会调用 HAL 库。

用户可以使用 STMCubeMX 直接生成对应芯片的整个项目(目前主流开发工具的项目基本全支持),STMCubeMX 负责给整理各种需要的源码文件。如下所所示。

图11 STM32Cube生成代码过程.png?imageView2/2/w/1000


好了,关于STM32固件库与STM32Cube产品介绍就到这里吧,在虎纹,笔者将带领大家学习如何安装与使用STM32Cube。


关键字:STM32  固件库  STM32Cube 引用地址:《嵌入式-STM32开发指南》第一部分 入门篇 - 第7章 STM32固件库与STM32Cube产品介绍

上一篇:STM32CUBEMX F103 HAL库开发之 USB虚拟串口
下一篇:《嵌入式-STM32开发指南》第一部分 入门篇 - 第5章 STM32新建工程及配置

推荐阅读最新更新时间:2026-03-20 13:37

STm32 使用 stm32cube GPIO 点亮 led 的
一、API说明 HAL库一共包含如下6个IO操作函数: 1、读取某个引脚的电平状态: HAL_GPIO_ReadPin() 2、写入某个引脚的电平状态: HAL_GPIO_WritePin() 3、翻转某个引脚的电平状态: HAL_GPIO_TogglePin() 4、锁定某个引脚的配置状态(直到下次复位): HAL_GPIO_LockPin() 5、外部中断服务函数: HAL_GPIO_EXTI_IRQHandler() 6、外部中断回调函数: HAL_GPIO_EXTI_Callback() 具体使用方法参见 STM32F4xx HAL驱动说明书 。 二、GPIO使用示例 示例功能:使用按键(PC13)翻转LED(PA5)
[单片机]
<font color='red'>STm32</font> 使用 <font color='red'>stm32cube</font> GPIO 点亮 led 的
stm32固件库之读取按键
//按键接下拉4.7k 上升沿中断.按键上并联104电容抗抖动 //引脚定义 /*******************************************************/ define KEY1_PIN GPIO_Pin_0 define KEY1_GPIO_PORT GPIOA define KEY1_GPIO_CLK RCC_AHB1Periph_GPIOA define KEY2_PIN GPIO_Pin_13 define KEY2_GPIO_PORT GPIOC define KEY2_GPIO_CLK RCC_AHB1Pe
[单片机]
STM32系列MCU,写寄存器Or利用固件库
写在开头的话: 最近心血来潮,打算重新捡起老本行,结果发现很多都忘记了。干脆重新开始学习,并做个从零开始的笔记了。 STM32系列MCU STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片适用于不同的应用场景。F0/L0基于ARM Cortex®-M0,F1/F2/L1系列基于ARM Cortex®-M3,F3/F4/L4系列基于ARM Cortex®-M4,F7/H7基于ARM Cortex®-M7。L系列表示超低功耗,H表示超高性能(对应就是高功耗了),F就是个折中方案了,性能不错,功耗也不高。 其他的先不管,F1系列芯片主要分类如下: ·超值型STM32F100
[单片机]
<font color='red'>STM32</font>系列MCU,写寄存器Or利用<font color='red'>固件库</font>
STM32的三种开发方式 HAL库固件库安装与用户手册
  相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好、黑猫也好,抓到耗子就是好猫。 STM32的三种开发方式   通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。   网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别,所以笔者想以一种非常直白的方式,用自己的理解去将这些东西表述出来,如果有描述的不对的
[单片机]
<font color='red'>STM32</font>的三种开发方式 HAL库<font color='red'>固件库</font>安装与用户手册
浅谈STM32芯片行丝印含义,固件库命名规则及三大结构发展图示
STM32芯片上的5行丝印 1、ARM代表ARM内核,ARM后面跟着的是 X,代表芯片版本 内核是不变的 只是ST的版本 X是最终版本,就是以后这个型号就不会再升级了,有数字的代理以后还可以升级 2/3、第二行和第三行是型号 4、原厂出厂编号 5、MYS是马来西亚封装产地,641是代表2016年41周生产的 CHN是国内封装产地 STM32固件库命名规则 1、系统文件名和源文件名以‘ stm32f10x_’的形式表示。 2、在单一文件中使用的常量在该文件中定义。在多个文件中使用的常量定义在头文件中。所有常量都以大写字母表示。 3、寄存器当做常量看待,同样以大写字母表示,多数情况下,在STM3210X参考手册中使用相同的缩写
[单片机]
浅谈<font color='red'>STM32</font>芯片行丝印含义,<font color='red'>固件库</font>命名规则及三大结构发展图示
基于STM32调用固件库实现点灯
相信学过单片机的同学,对于调库这个操作都不陌生,大多数人都是从调别人的库阶段过来的。 今天看到一个评论说,如果只会调库,到了公司后会发现自己啥都不是。其实这话说的一点也不假,如果只会调库的话,你的单片机水平还停留在C语言阶段,并不能称为真正的单片机开发。 但我们要有这么一个概念:调库是自己编写的开始,如果上来就给你讲寄存器这些,我相信很多初学者都接收不了、理解不了这写寄存器到底在干啥。可是,如果从调别人库开始学习单片机,我们就会对单片机有个初始概念,对于后面的学习非常有帮助。 所以,今天我们就来看一下如何从调库工程师成为真正的开发工程师。 1. 什么是调库? 如果你通过机构的培训视频,比如野火的STM32单片机开
[单片机]
基于<font color='red'>STM32</font>调用<font color='red'>固件库</font>实现点灯
STM32固件库文件分析
1-汇编编写的启动文件 startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界 2-时钟配置文件 system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。 3-外设相关的 stm32f10x.h:实现了内核之外的外设的寄存器映射 xxx:GPIO、USRAT、I2C、SPI、FSMC stm32f10x_xx.c:外设的驱动函数库文件 stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明 4-内核相关的 CMSIS - Cortex 微控制器软件接
[单片机]
STM32固件库文件含义解析
1-汇编编写的启动文件 startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界 2-时钟配置文件 system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。 3-外设相关的 stm32f10x.h:实现了内核之外的外设的寄存器映射 xxx:GPIO、USRAT、I2C、SPI、FSMC stm32f10x_xx.c:外设的驱动函数库文件 stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明 4-内核相关的 CMSIS - Cortex 微控制器软件接
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved