HAL库
HAL,英文全称 Hardware Abstraction Layer,即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库,用户只需要调用库的API函数,便可间接配置寄存器。我们写程序控制STM32芯片,其实最终就是控制他的寄存器,使之工作在我们需要的模式下,HAL库将大部分寄存器的操作封装成了函数,我们只需要学习和掌握HAL库的结构和用法,就能方便地驱动STM32工作,以节省开发时间。
CMSIS标准
CMSIS(微控制器软件接口标准),全称 Cortex Microcontroller Software Interface Standard ,是由ARM和其合作的芯片厂商、软件工具厂商,共同制定的标准。分为三层,从上到下,分别是用户层、中间层、硬件层。
STM32F1结构框图
获取方法:www.st.com -> Tools & Software -> Ecosystem -> STM32Cube -> Prodcut selector -> STM32CubeF1
STM32CubeF1固件包的目录结构
在固件包的目录结构里面,我们重点关注驱动源码(Drivers),中间文件(Middlewares),ST官方开发板例程(Projects)三个文件夹。
1. 驱动源码(Drivers):
文件夹 | 子文件 | 作用 |
---|---|---|
Drivers | BSP | 板级支持包,用于适配ST官方的开发板(可参考) |
CMSIS | 符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等 | |
STM32F1xx_HAL_Driver | HAL库外设驱动源码,包括F1系列HAL库源文件和头文件 |
2. 中间文件(Middlewares):
Middlewares | ST | STemWin | STemWin工具包 |
---|---|---|---|
STM32_USB_Device_Library | USB从机设备支持包 | ||
STM32_USB_Host_Library | USB主机设备支持包 | ||
Third_Party | FatFs | FAT文件系统支持包 | |
FreeRTOS | FreeRTOS实时系统支持包 | ||
LwIP | LwIP网络通信协议支持包 |
3. ST官方开发板例程(Projects):
该文件夹存放的是 ST官方的开发板的适配例程,每个文件夹对应一个ST 官方的Demo板, 根据型号的不同提供 MDK 和 IAR 等类型的例程。里面有很多实例,读者可以根据自己的需要来作为参考。
Drivers/CMSIS/Device 和Include文件中的关键文件
Device:
文件名称 | 描述 |
---|---|
stm32f1xx.h | 是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义 |
stm32f103xe.h | 包含中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定 |
system_stm32f1xx.c system_stm32f1xx.h | 定义了系统初始化函数 SystemInit和系统时钟更新函数 SystemCoreClockUpdate |
startup_stm32f103xe.s | 大容量F103系列芯片的启动文件 |
Include:
cmsis_armcc.h、cmsis_armclang.h、cmsis_compiler.h、cmsis_version.h、core_cm3.h 、 mpu_armv7.h
Drivers/CMSIS/Stm32F1xxHAL_Driver/Inc Src 库文件介绍
文件 | 描述 |
---|---|
stm32f1xx_hal.c stm32f1xx_hal.h | HAL库初始化、系统滴答、HAL库延时等相关函数 |
stm32f1xx_hal_conf.h | HAL库的用户配置文件,用于裁剪HAL库、配置晶振参数等 |
stm32f1xx_hal_def.h | 包含HAL库通用的枚举类型数据和宏定义 |
stm32f1xx_hal_cortex.h stm32f1xx_hal_cortex.c | 内核通用函数定义和声明,如NVIC、MPU、系统软复位、Systick等, 其实主要是对core_cm3.h 文件的相关函数再次封装。 |
stm32f1xx_hal_ppp.c stm32f1xx_hal_ppp.h | 某任意外设驱动源码,PPP表示任意外设 |
stm32f1xx_hal_ppp_ex.c stm32f1xx_hal_ppp_ex.h | 主要是存放外设的扩展(特殊)功能的驱动源码,PPP表示任意外设 |
stm32f1xx_II_ppp.c stm32f1xx_II_ppp.h | LL库驱动源码,在部分STM32f1xx_hal_ppp.c 或stm32f1xx_hal_ppp_ex.c 中会被调用 |
库文件中API函数和变量的命名规则
文件名称 | stm32f1xx_hal_ppp.(c/h) | stm32f1xx_hal_ppp_ex.(c/h) |
---|---|---|
函数名 | HAL_PPP_Function | HAL_PPPEx_Function |
外设句柄 | PPP_HandleTypeDef | 无 |
外设工作参数 初始化结构体 | PPP_InitTypeDef | PPP_InitTypeDef |
配置参数结构体 | PPP_ YyyyConfTypeDef | PPP_ YyyyConfTypeDef |
常用函数:
初始化/反初始化函数: HAL_PPP_Init(), HAL_PPP_DeInit()
外设读写函数: HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()
控制函数: HAL_PPP_Set(), HAL_PPP_Get()
状态和错误: HAL_PPP_GetState(), HAL_PPP_GetError()
HAL库对寄存器位操作的相关宏定义:
宏定义结构 | 用途 |
---|---|
__HAL_PPP_ENABLE_IT(__HANDLE__, __INTERRUPT__) | 使能外设中断 |
__HAL_PPP_DISABLE_IT(__HANDLE__, __INTERRUPT__) | 禁用外设中断 |
__HAL_PPP_GET_IT (__HANDLE__, __ INTERRUPT __) | 获取外设某一中断源 |
__HAL_PPP_CLEAR_IT (__HANDLE__, __ INTERRUPT __) | 清除外设中断 |
__HAL_PPP_GET_FLAG (__HANDLE__, __FLAG__) | 获取外设的状态标记 |
__HAL_PPP_CLEAR_FLAG (__HANDLE__, __FLAG__) | 清除外设的状态标记 |
__HAL_PPP_ENABLE(__HANDLE__) | 使能某一外设 |
__HAL_PPP_DISABLE(__HANDLE__) | 禁用某一外设 |
__HAL_PPP_XXXX (__HANDLE__, __PARAM__) | 针对外设的特殊操作 |
___HAL_PPP_GET_IT_SOURCE (__HANDLE__, __INTERRUPT __) | 检查外设的中断源 |
? HAL库对寄存器位操作的相关宏定义:
回调函数 | 举例 |
---|---|
HAL_PPP_MspInit() / _MspDeInit() | 举例: HAL_USART_MspInit() 会被HAL_PPP_Init() 函数调用,该函数主要用于存放外设使用到的GPIO、CLOCK、NVIC、DMA等初始化代码 |
HAL_PPP_ProcessCpltCallback | 举例: HAL_USART_TxCpltCallback 由外设中断或DMA中断调用,HAL库中断公共处理函数已经实现对中断标记位读取、判断和清除操作,用户只需要专注于中断逻辑功能的实现即可 |
HAL_PPP_ErrorCallback | 举例: HAL_USART_ErrorCallback 外设或DMA中断中发生的错误,用于发生错误处理 |
简要步骤:
新建工程文件夹
文件夹名称 | 作用 |
---|---|
Drivers | 存放与硬件相关的驱动层文件 |
Middlewares | 存放正点原子提供的中间层组件文件和第三方中间层文件 |
Output | 存放工程编译输出文件 |
Projects | 存放 MDK 工程文件 |
User | 存放HAL库用户配置文件、main.c、中断处理文件,以及分散加载文件 |
新建一个工程框架
添加文件
魔术棒配置
Target
选项卡:设置使用的编辑器版本、外部晶振频率Output
选项卡:设置Objects输出文件夹、生成.hex
文件、输出浏览信息Listing
选项卡:设置Listing输出文件夹C/C++
选项卡:设置全局宏定义、优化等级、C99 Mode、设置头文件包含路径Debug
选项卡:设置使用的仿真器类型,选择的下载接口等Utilities
选项卡:设置下载功能、下载算法、下载算法起始地址与大小等Linker
选项卡:添加分散加载文件( 北极星/MiniPro H750)添加main.c文件
声明:资料来源(战舰STM32F103ZET6开发板资源包)
- Cortex-M3权威指南(中文).pdf
- STM32F10xxx参考手册_V10(中文版).pdf
- STM32F103 战舰开发指南V1.3.pdf
- STM32F103ZET6(中文版).pdf
- 战舰V4 硬件参考手册_V1.0.pdf