目录
初识HAL库
CMSIS标准
CMSIS(Cortex Microcontrolller Software Interface Standart)微控制器软件接口标准,是由ARM和其他芯片厂商共同开发的一套标准。这个标准把软件分为3层。
- 用户代码层(用户自己写的代码)
- CMSIS层(就是一个包,不同芯片厂家可能不一样,ST公司是STM32Cube包)
- 硬件层
其中HAL库就在CMSIS层。
HAL库
针对STM32开发,有如下几种开发方式。
- 直接操作寄存器(执行效率高,但是开发太慢)
- 使用标准外设库(目前官方不更新了,对于F7及其之后的系列不支持)
- HAL库(官方主推,兼容性好,有时会调用LL库,效率可能稍慢一点)
- LL库(直接操作底层,执行效率比HAL库高一点,与HAL库一起发布。但是不能匹配复杂外设)
STM32Cube固件包介绍
固件包获取
- ST官网搜索STM32Cube固件包
- 正点原子等论坛下载
STM32Cube固件包简介
下载来的固件包如下图所示,其中只有3个文件夹需要关心,其他都不需要管。
Drives
Drives包含以下3个文件。
-
BSP 存放官方开发板的板级支持包。对于我们来说,里面的东西完全可以按照自己的板子写。
-
CMSIS 用于存放符合CMSIS的组件,包括DSP库,Cortex-M内核及其设备文件,微控制器启动文件,专用头文件,专用系统文件等。CMSIS标准规定了CMSIS文件夹中有以下功能。
CMSIS中包含以上文件,重要的是Device和Include这两个。
device中我们主要需要以下文件。
include文件夹下面需要这些文件,这些文件都是为了程序编译不报错,无需深究。只有第五个文件需要依据你的单片机内核的不同而改变,这里使用的是M3内核单片机,选择core_cm3.h。
-
STM32F4xx_HAL_Driver 存放F4单片机系列的HAL库,如果是STM32F1xx_HAL_Driver 存放F1单片机系列的HAL库.这里面存放这HAL库源码。此处由于下载的不同会有区别。其中inc,src里面的Legacy存放的是补充的源文件/头文件。因为只有一些芯片才有这些功能。
Middlewares
中间层存放ST公司或其他第三方库。包括ST的USB,STemWin和第三方的RTOS,LWIP等库。
Projects
主要是官方工程,可以看看。
HAL库结构框架
HAL库文件介绍
HAL库API函数和变量命名规则
HAL库寄存器位操作相关宏定义
HAL库回调函数
初步了解HAL库的一些规则,有利于我们看懂和使用HAL库。
HAL库使用
HAL库使用需要文件
HAL库使用需要以下文件
以上文件再CMSIS中分别处于这些层
HAL库配置文件(STM32f1xx_hal_config.h)
- 裁剪HAL库外设驱动源码,有以下两个方法。
1.在STM32f1xx_hal_config.h中存在以下宏定义,如果不使用相关外设,直接屏蔽掉即可。屏蔽掉之后程序就不会编译相关外设驱动。
2.不将HAL库中全部的外设驱动都加入文件中,只加入需要的文件即可。
- 设置外部高速晶振频率
- 设置时钟之前,需要先知道你的开发板自己的时钟大小,在芯片开发手册上有这些参数。
-
- 设置外部低速晶振频率