打印
[应用相关]

STM32 HAL固件库详解

[复制链接]
556|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言

ST 公司提供的HAL 库,极大的方便了我们日常的编程操作,本文将介绍CMSIS、HAL库的结构、库目录、库文件之间的关系。
一、CMSIS 标准及库层次关系

因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex 微控制器软件的兼容性问题,ARM 与芯片厂商建立了CMSIS 标准(Cortex MicroController Software Interface Standard)。

下图即为 CMSIS标准:




使用特权

评论回复
评论
和下土 2023-3-29 10:36 回复TA
———————————————— 版权声明:本文为CSDN博主「Dir_xr」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Dir_x/article/details/128878053 
沙发
和下土|  楼主 | 2023-3-29 10:39 | 只看该作者
CMSIS 标准中最主要的为CMSIS 核心层,它包括了:
(1)内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由ARM 公司提供。
(2)设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
CMSIS 层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,极大的方便了的移植操作。
STM32 的库,就是按照CMSIS 标准建立的。

使用特权

评论回复
板凳
和下土|  楼主 | 2023-3-29 10:41 | 只看该作者
二、HAL库文件

STM32 HAL库文件,以STM32F1系列库文件为例进行介绍,
“STM32Cube_FW_F1_V1.8.4”

使用特权

评论回复
地板
和下土|  楼主 | 2023-3-29 10:42 | 只看该作者
Documentation:文件夹下是HAL 库帮助文档,主要讲述如何使用驱动库来编写自己的应用程序,纯英文文档
Drivers:文件夹下是官方的CMSISI 库,HAL 库,板载外设驱动。
Middlewares:中间件,包含ST 官方的STemWin、STM32_Audio、STM32_USB_Device_Library、STM32_USB_Host_Library;也有第三方的fatfs 文件系统等等。
Project :文件夹下是用驱动库写的针对官方发行demo 板的例子和工程模板。
Utilities:实用的公用组件比如LCD_LOG 实用液晶打印调试信息。
Release_Note.html:库的版本更新说明。

使用特权

评论回复
5
和下土|  楼主 | 2023-3-29 10:43 | 只看该作者
使用库开发时,我们需要把Drivers 目录下的CMSIS、STM32F1xx_HAL_Driver 内核与外设的库文件添加到工程中

其中最重要的CMSIS文件夹:

使用特权

评论回复
6
和下土|  楼主 | 2023-3-29 10:43 | 只看该作者
Include 文件夹

在Include 文件夹中包含了的是位于CMSIS 标准的核内设备函数层的Cortex-M 核通用的头文件,它们的作用是为那些采用Cortex-M 核设计SOC 的芯片商设计的芯片外设提供一个进入内核的接口,定义了一些内核相关的寄存器(类似stm32F103xx.h 文件,但定义的是内核部分的寄存器)。这些文件在其它公司的Cortex-M 系列芯片也是相同的。

我们写STM32F1 的工程,必须用到其中的四个文件:core_cm3.h、core_cmFunc.h、corecmInstr.h、core_cmSimd.h,其它的文件是属于其它内核的,还有几个文件是DSP 函数库使用的头文件。

core_cM3.c 文件有一些与编译器相关条件编译语句,用于屏蔽不同编译器的差异。里面包含了一些跟编译器相关的信息。
core_cm3.c 跟启动文件一样都是底层文件,都是由ARM 公司提供的,遵守CMSIS 标准,即所有CM3 芯片的库都带有这个文件,这样软件在不同的CM3 芯片的移植工作就得以简化。

使用特权

评论回复
7
和下土|  楼主 | 2023-3-29 10:43 | 只看该作者
Device 文件夹

在Device 文件夹下的是具体芯片直接相关的文件,包含启动文件、芯片外设寄存器定义、系统时钟初始化功能的一些文件,这是由ST 公司提供的。

system_stm32f1xx.c 文件

文件目录:\Drivers\CMSIS\ Device\ST\stm32f1xx\Source\Templates

这个文件包含了STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数,例如“SystemInit”函数,用于上电后初始化时钟,该函数的定义就存储在system_stm32f1xx.c 文件。STM32F103 系列的芯片,调用库的这SystemInit 函数后,系统时钟被初始化为72MHz,如有需要可以修改这个文件的内容,设置成自己所需的时钟频率。

使用特权

评论回复
8
和下土|  楼主 | 2023-3-29 10:44 | 只看该作者
启动文件

文件目录:\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates

在这个目录下,还有很多文件夹,如“ARM”、“gcc”、“iar”等,这些文件夹下包含了对应编译平台的汇编启动文件,在实际使用时要根据编译平台来选择。我们使用的MDK 启动文件在“ARM”文件夹中。其中的“strartup_STM32F103xx.s”即为STM32F103 芯片的启动文件。

使用特权

评论回复
9
和下土|  楼主 | 2023-3-29 10:44 | 只看该作者
stm32F103xx.h 文件

文件目录:\Drivers\CMSIS\Device\ST\stm32f1xx\Include

stm32F103xx.h 这个文件非常重要,是一个STM32 芯片底层相关的文件。它包含了STM32 中所有的外设寄存器地址和结构体类型定义,在使用到STM32 HAL 库的地方都要包含这个头文件。

使用特权

评论回复
10
和下土|  楼主 | 2023-3-29 10:46 | 只看该作者
STM32F1xx_HAL_Driver 文件夹

文件目录:Drivers\STM32F1xx_HAL_Driver

使用特权

评论回复
11
和下土|  楼主 | 2023-3-29 10:46 | 只看该作者
STM32F1xx_HAL_Driver 文件夹下有inc(include 的缩写)跟src(source 的简写)这两个文件夹,这里的文件属于CMSIS 之外的的、芯片片上外设部分。

src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件。

使用特权

评论回复
12
和下土|  楼主 | 2023-3-29 10:46 | 只看该作者
src 及inc 文件夹是ST 的HAL 库的主要内容。
在src 和inc 文件夹里的就是ST 公司针对每个STM32 外设而编写的库函数文件,每个外设对应一个*.c* 和.h 后缀的文件。

我们把这类外设文件统称为:stm32f1xx_hal_ppp.c 或stm32f1xx_hal_ppp.h
文件,PPP 表示外设名称。

例如:模数转换(ADC) 外设,在src 文件夹下有一个stm32f1xx_hal_adc.c 源文件,在inc 文件夹下有一个stm32f1xx_hal_adc.h 头文件,若我们开发的工程中用到了STM32 内部的ADC,则至少要把这两个文件包含到工程里。

使用特权

评论回复
13
和下土|  楼主 | 2023-3-29 10:53 | 只看该作者
stm32f1xx_it.c、stm32f1xx_hal_conf.h 文件

文件目录:STM32Cube_FW_F1_V1.8.4\Projects\STM32F103RB-Nucleo\Templates

在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下src 文件夹中stm32f1xx_it.c 和inc 文件夹中和stm32f1xx_it.h、stm32f1xx_hal_conf.h这三个文件。

使用特权

评论回复
14
和下土|  楼主 | 2023-3-29 10:54 | 只看该作者
stm32f1xx_it.c:这个文件是用来编写中断服务函数的

stm32f1xx_hal_conf.h:这个文件被包含进stm32f103xx.h 文件。STM32HAL 库支持所有STM32F1型号的芯片,但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减ST 库的外设文件, 另外时钟源配置也是在这里进行设置。

使用特权

评论回复
15
和下土|  楼主 | 2023-3-29 10:54 | 只看该作者
三、库各文件间的关系

从整体上看各个文件在库工程中的层次或关系,把这些文件对应到CMSIS 标准架构上

使用特权

评论回复
16
和下土|  楼主 | 2023-3-29 10:55 | 只看该作者
上图描述了STM32 库各文件之间的调用关系,这个图省略了DSP 核和实时系统层部分的文件关系。在实际的使用库开发工程的过程中,我们把位于CMSIS 层的文件包含进工程,除了特殊系统时钟需要修改system_stm32f1xx.c,其它文件丝毫不用修改,也不建议修改。

对于位于用户层的几个文件,就是我们在使用库的时候,针对不同的应用对库文件进行增删(用条件编译的方法增删)和改动的文件。

使用特权

评论回复
17
和下土|  楼主 | 2023-3-29 10:55 | 只看该作者
附录

以上介绍的HAL固件库文件夹可以在STM32CubeMx的库文件安装目录里面找到

使用特权

评论回复
18
gongche| | 2023-3-29 20:48 | 只看该作者
把位于CMSIS 层的文件包含进工程,除了特殊系统时钟需要修改system_stm32f1xx.c

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1061

帖子

0

粉丝