STM32——HAL库
本文系统介绍了STM32开发中的关键知识点:1. 概述了CMIS架构和HAL库特点;2. 详细说明STM32Cube固件包的获取方式及目录结构,重点分析正点原子整理的固件包中CMSIS关键文件;3. 解析HAL库框架结构,包括文件夹组织、API命名规则、寄存器操作宏定义和回调函数机制;4. 阐述HAL库实际应用,包括开发文件结构、用户配置方法(外设驱动裁剪和晶振频率设置)及设备驱动层调用。内容涵盖
总:STM32——学习总纲
一、简介
1.1 CMIS简介

所有厂家为了市场兼容性推出的标准
arm架构

1.2 HAL库简介

1.2.1 各种库优缺点

二、 STM32 Cube固件包
ST公司为CMSIS 中间层开发的pack,包含HAL。

2.1 获取方式

ST官网:st.com/content/st_com/en.html
搜索:STM32cube - 工具与软件 - Search STMicrocontrollers

2.2 CMSIS标准软件包目录

2.3 正点原子整理的固件包


2.3.1 两个主要文件夹内容


2.3.2 Cube固件包Drivers下CMSIS的关键文件

2.3.2.1 Device&Include文件
2.3.2.1.1 简介

以及
。。。
此未精简后11个关键文件。
2.3.2.1.2 路径
stm32f1xx.h && stm32f103xe.h :
systemxxx.h && .c:
启动文件 startup:
,startup_stm32f103xe.s - F103芯片大容量256k~512K
整理的固件包中有精简版CMSIS包,只包含了用到的文件。

三、HAL库框架结构
3.1 HAL 库文件夹结构


HAL库源码用于外设驱动,位于STM32 Cube包 Drivers文件夹下 STM32F1xx_HAL_Driver。
3.2 HAL 库文件介绍
ppp是任意外设,看成xxx易理解。

3.3 HAL 库 API 函数和变量命名规则

少数会有不符合的情况。
举例:

3.4 HAL 库对寄存器位操作的宏定义
标准库中对寄存器操作主要用 API函数,HAL 库有具体的宏定义。例如:

具体文件--》
3.5 HAL 库回调函数(callback)
3.5.1 简介

通常用法:

![]()
理解方向:C++函数重写(override),同名同参数,不同函数体。
3.5.2 中断回调函数

四、HAL 库使用
4.1 STM32开发文件结构分布

4.2 基于CMSIS应用程序文件描述
也就是ST公司STM32 Cube固件包描述

4.2.1 CMSIS 核心层
2.3.2 中的关键文件。
4.2.2 设备驱动层
主要就是HAL 库 和 LL 库 外设驱动库。
4.2.3 用户程序文件
用户配置文件需要配置。其余可删除。

4.3 HAL 库的用户层配置(STM32f1xx_hal_conf.h)
在用户程序层配置用户自配置。

4.3.1 裁剪 HAL 库外设驱动源码(不进行编译)。
A、使用条件编译。

例如enable了GPIO的此宏,就是使能GPIO的驱动。
原理:在.c中使用#ifdef判断是否跳过预处理阶段

B、工程中使用什么外设就导入什么外设.c文件

4.3.2 设置晶振频率

4.3.2.1 设置外部高速晶振(HSE)频率:8MHz

4.3.2.2 设置内部高速晶振(HSI)频率:8MHz

4.3.2.3 设置外部低速晶振(LSE)频率:32.768 kHz

4.3.2.4 设置内部低速晶振(LSI)频率:40 kHz

4.4 HAL 库设备驱动层(STM32f1xx_hal.c)调用
在设备驱动层,例如 HAL_Init():

---------------------------------------------------------------------------------------------------------------------------------
五、MDK工程使用
更多推荐



所有评论(0)