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

不同层次下文件的关系图

相关推荐
XINVRY-FPGA1 小时前
XC3S1000-4FGG320I Xilinx AMD Spartan-3 SRAM-based FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
猫猫的小茶馆3 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆3 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭3 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原4 小时前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯5 小时前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网6 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
贝塔实验室7 小时前
新手如何使用Altium Designer创建第一张原理图(三)
arm开发·单片机·嵌入式硬件·fpga开发·射频工程·基带工程·嵌入式实时数据库
@good_good_study7 小时前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件
Darken037 小时前
什么是“位带”?;在STM32单片机中有什么作用?
stm32·单片机·嵌入式硬件