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

不同层次下文件的关系图

相关推荐
奋斗的牛马6 分钟前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
蓁蓁啊44 分钟前
Ubuntu 虚拟机文件传输到 Windows的一种好玩的办法
linux·运维·windows·单片机·ubuntu
EVERSPIN1 小时前
32位MCU芯片国产品牌(32系列单片机常用型号有哪些)
单片机·嵌入式硬件·mcu单片机·32系列单片机
爱吃汽的小橘2 小时前
使用DSI TX IP驱动LCD显示屏
单片机·嵌入式硬件
芯联智造2 小时前
【stm32协议外设篇】- PAJ7620手势识别传感器
c语言·stm32·单片机·嵌入式硬件
从零点2 小时前
STM32F407运动资源分配
stm32·单片机·嵌入式硬件
d111111111d2 小时前
STM32外设学习-串口发送数据-接收数据(笔记)
笔记·stm32·学习
逆小舟3 小时前
【STM32】串口
stm32·单片机·嵌入式硬件
ThreeYear_s4 小时前
【FPGA+DSP系列】——PWM电平光耦转换电路实验分析----电路原理分析,器件选型
单片机·嵌入式硬件·fpga开发
天天爱吃肉82185 小时前
深入理解电流传感器相位补偿:原理、方法与典型应用
人工智能·嵌入式硬件·汽车