HAL库文件解析与MDK工程创建
前言
本文是基于正点原子新发布的HAL库学习教程的学习笔记,不明白的可以去看正点原子的视频。
HAL库获取
ST 为了方便用户开发 STM32芯片开发提供了三种库:
标准外设库 (Standard Peripheral Libraries)
HAL库(硬件抽象层):Hardware Abstraction Layer
LL库:Low Layer
目前标准库已停止维护,ST主推HAL库,使用CUBEMX生成的代码也是基于HAL库,LL库是与HAL库捆绑发布,是HAL库的轻量化版本。
我们可以在ST公司的官网获取HAL库,在官网搜索STM32Cube,找到对应的版本下载即可
HAL库文件讲解
HAL库结构
打开固件包是这样的:

我们需要的文件一般都在Drivers文件夹

CMSIS文件夹:


重要文件讲解
以stm32f103c8t6为例
| ./路径/文件名 | 描述 |
|---|---|
| \CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h | 是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义(固件库没用这个) |
| \CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h | 包含:中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定。 |
| \Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\ system_stm32f1xx.c | 定义了系统初始化函数 SystemInit和系统时钟更新函数 SystemCoreClockUpdate |
| \Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h | 定义了系统初始化函数 SystemInit和系统时钟更新函数 SystemCoreClockUpdate |
| \CMSIS\Device\ST\STM32F1xx\Include\startup_stm32f103xb.s | 中容量F103系列芯片的启动文件 |
HAL库文件介绍

ps:v1.8版本的HAL库的stm32f1xx_hal_conf.h文件为stm32f1xx_hal_conf_template.h。根据文件内描述,移植的时候重新命名为stm32f1xx_hal_conf.h即可
CMSIS文件
在固件包\Drivers\CMSIS\Core\Include\路径下,定义了一些关于编译器 、内核、架构的头文件,根据需要移植即可。

工程创建
创建工程文件夹
先创建一个新的工程文件夹,打开后新建如下文件夹:

Middlewares文件夹:该文件夹用于存放其他第三方提供的中间层代码(组件/Lib 等),
如: USMART、MALLOC、 TEXT、 FATFS、 USB、 LWIP、各种 OS、各种 GUI 等
Drivers文件夹下新建如下文件夹

移植HAL库
建立完文件夹后:按上一章节介绍找到在固件包对应文件,复制到相应位置。
其中
stm32f1xx.hal.conf.h
stm32f1xx_it.c
stm32f1xx_it.h
stm32f1xx_hal_msp.c // 回调函数存放文件,不用可删除
放入User文件夹,后三个个文件可以去固件包的Projects文件夹的官方例程里找,也可以把中断服务函数定义在其他位置。
前一章节五个重要文件放入CMSIS
内核文件放入CMSIS
main.c也可以定义在User文件夹

MDK建立工程
工程新建到Project文件夹下的MDK-ARM文件夹
工程分组
建立如下分组:
Middlewares没用到可以先不加

添加对应.C文件即可
ps:外设库文件按需求添加,可以加快编译速度,全添加完可能会有重复定义的函数,导致编译错误。
魔术棒配置
Target选项卡

晶振按实际的设置
Output选项卡

点上面唯一的按钮,将hex文件输出设置为Output文件夹
C/C++选项卡

Define:USE_HAL_DRIVER,STM32F103xE
后面那个XE表示大容量,根据实际情况去设置
打开stm32f1xx.h文件
该选项是通过条件编译来包含对应芯片的头文件

Include Path选项

添加工程文件夹内所有的头文件路径
Debug选项卡
设置对应的下载器

点开Setting按钮:
Debug选项,设置接口和下载速度

Flash Dowload选项

根据实际设置芯片容量,选择的Flash符合容量范围即可
例如:stm32f103c8t6 为中容量产品 flash为64k ‘
可选择如下选项

64k-128k为中容量:


本文介绍了如何获取和理解STM32的HAL库,包括库的结构、重要文件的作用,以及如何在MDK环境中创建工程、移植HAL库。CMSIS文件夹包含关于编译器和内核的头文件。工程创建涉及文件夹结构规划、HAL库文件的复制和配置,以及MDK工程的魔术棒配置、Target、Output、C/C++和Debug选项卡的设置。

281

被折叠的 条评论
为什么被折叠?



