HAL库介绍
自从ST公司推出HAL库来替代原有的标准库,HAL库开始慢慢的被广大STM32开发者所接受,现在已经在实际的项目开发中大量使用,HAL库使得项目的移植变得简单容易。
- Drivers:文件夹下是官方的 CMSISI 库, HAL 库,板载外设驱动。
- Middlewares:中间件,包含 ST 官方的 STemWin、 STM32_Audio、STM32_USB_Device_Library、 STM32_USB_Host_Library;也有第三方的 fatfs文件系统等等。
- Project : 文件夹下是用驱动库写的针对官方发行 demo 板的例子和工程模板
CMSIS标准
因为基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性题, ARM 与芯片厂商建立了 CMSIS 标准 (Cortex MicroController SoftwareInterface Standard)。
CMSIS 标准中最主要的为 CMSIS 核心层,它包括了:
- 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由 ARM 公司提供。
- 设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。
HAL的基本使用
在使用库开发时,我们需要把 Drivers 目录下的 CMSIS、 STM32F1xx_HAL_Driver 内核与外设的库文件添加到工程中,并查阅库帮助文档来了解 ST 提供的库函数。
STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\文件夹下内容。
其中 Device 与 Include 中的文件是我们使用得最多的
Include文件
在 Include 文件夹中包含了的是位于 CMSIS 标准的核内设备函数层的 Cortex-M 核通用的头文件,
它们的作用是为那些采用 Cortex-M 核设计 SOC 的芯片商设计的芯片外设提供一个进入内核的接
口,定义了一些内核相关的寄存器 (类似我们前面写的 stm32F103xx.h 文件,但定义的是内核部
分的寄存器)。这些文件在其它公司的 Cortex-M 系列芯片也是相同的。至于这些功能是怎样用源
码实现的,可以不用管它,只需把这些文件加进我们的工程文件即可。
Device 文件
在 Device 文件夹下的是具体芯片直接相关的文件,包含启动文件、芯片外设寄存器定义、系统时
钟初始化功能的一些文件,这是由 ST 公司提供的。
- system_stm32f1xx.c 文件
文件目录: \Drivers\CMSIS\ Device\ST\stm32f1xx\Source\Templates
这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数,例如我们前两章提到供启动文件调用的“SystemInit”函数,用于上电后初始化时钟,该函数的定义就存储system_stm32f1xx.c 文件。 STM32F103 系列的芯片,调用库的这个 SystemInit 函数后,系统时钟被初始化为 72MHz,如有需要可以修改这个文件的内容,设置成自己所需的时钟频率。 - 启动文件
文件目录: \Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates
在这个目录下,还有很多文件夹,如“ARM”、“gcc”、“iar”等,这些文件夹下包含了对应编译平台的汇编启动文件,在实际使用时要根据编译平台来选择。我们使用的 MDK 启动文件在“ARM”文件夹中。其中的“strartup_STM32F103xx.s”即为 STM32F103 芯片的启动文件。 - stm32F103xx.h 文件
文件目录: \Drivers\CMSIS\Device\ST\stm32f1xx\Include
stm32F103xx.h 这个文件非常重要,是一个 STM32 芯片底层相关的文件,包含了 STM32 中所有的外设寄存器地址和结构体类型定义,在使用到 STM32 HAL 库的地方都要包含这个头文件。
STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver \文件夹下内容。
STM32F1xx_HAL_Driver 文件夹下有 inc(include 的缩写)跟 src(source 的简写)这两个文件夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分。 src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件。 src 及 inc 文件夹是 ST 的 HAL 库的主要内容,甚至不少人直接认为 ST 的 HAL 库就是指这些文件,可见其重要性。‘
STM32Cube_FW_F4_V1.19.0\Projects\STM32F103ZI-Nucleo\Templates文件下内容
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下 src 文件夹中 stm32f1xx_it.c 和 inc 文件夹中和 stm32f1xx_it.h、 stm32f1xx_hal_conf.h这三个文件。
stm32f1xx_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常 (特殊中断) 的接口,其它普通中断服务函数由我们自己添加。但是我们怎么知道这些中断服务函数的接口如何写?是不是可以自定义呢?答案当然不是的,这些都有可以在汇编启动文件中找到。
stm32f1xx_hal_conf.h:这个文件被包含进 stm32f103xx.h 文件。 STM32HAL 库支持所有 STM32F1型号的芯片,但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减 ST 库的外设文件, 另外时钟源配置也是在这里进行设置。