STM32之HAL开发——初识HAL库

HAL库介绍

自从ST公司推出HAL库来替代原有的标准库,HAL库开始慢慢的被广大STM32开发者所接受,现在已经在实际的项目开发中大量使用,HAL库使得项目的移植变得简单容易。

  1. Drivers:文件夹下是官方的 CMSISI 库, HAL 库,板载外设驱动。
  2. Middlewares:中间件,包含 ST 官方的 STemWin、 STM32_Audio、STM32_USB_Device_Library、 STM32_USB_Host_Library;也有第三方的 fatfs文件系统等等。
  3. 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 库的外设文件, 另外时钟源配置也是在这里进行设置。

不同层次下文件的关系图

相关推荐
m0_748254091 小时前
STM32--超声波模块(HC—SR04)(标准库+HAL库)
stm32·单片机·嵌入式硬件
南城花随雪。1 小时前
单片机:实现FFT快速傅里叶变换算法(附带源码)
单片机·嵌入式硬件·算法
逝灮2 小时前
【蓝桥杯——物联网设计与开发】基础模块8 - RTC
stm32·单片机·嵌入式硬件·mcu·物联网·蓝桥杯·rtc
LXL_242 小时前
模拟——郑益慧_笔记1_绪论
嵌入式硬件
weixin_452600698 小时前
串行时钟保持芯片D1380/D1381,低功耗工作方式自带秒、分、时、日、日期、月、年的串行时钟保持芯片,每个月多少天以及闰年能自动调节
科技·单片机·嵌入式硬件·时钟·白色家电电源·微机串行时钟
森旺电子11 小时前
51单片机仿真摇号抽奖机源程序 12864液晶显示
单片机·嵌入式硬件·51单片机
不过四级不改名67713 小时前
蓝桥杯嵌入式备赛教程(1、led,2、lcd,3、key)
stm32·嵌入式硬件·蓝桥杯
小A15913 小时前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
Rorsion13 小时前
各种电机原理介绍
单片机·嵌入式硬件
善 .16 小时前
单片机的内存是指RAM还是ROM
单片机·嵌入式硬件