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 库的外设文件, 另外时钟源配置也是在这里进行设置。

不同层次下文件的关系图

相关推荐
FreakStudio1 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
EVERSPIN4 小时前
分享国产32位单片机的电机控制方案
单片机·嵌入式硬件
每天一杯冰美式oh4 小时前
51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】
嵌入式硬件·51单片机·proteus
芯橦7 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
夜间去看海11 小时前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花
VirtuousLiu11 小时前
LM74912-Q1用作电源开关
单片机·嵌入式硬件·ti·电源设计·lm74912·电源开关
打地基的小白11 小时前
软件I2C-基于江科大源码进行的原理解析和改造升级
stm32·单片机·嵌入式硬件·通信模式·i2c
Echo_cy_12 小时前
STM32 DMA+AD多通道
stm32·单片机·嵌入式硬件
朴人12 小时前
【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】
stm32·单片机·嵌入式硬件·foc
追梦少年时12 小时前
STM32中断——外部中断
stm32·单片机·嵌入式硬件