STM32-03-STM32HAL库

文章目录

  • STM32HAL库
    • 1. HAL库介绍
    • 2. STM32Cube固件包
    • 3. HAL库框架结构
    • 4. 新建HAL版本MDK工程

STM32HAL库

1. HAL库介绍

  • HAL库

    HAL,英文全称 Hardware Abstraction Layer,即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库,用户只需要调用库的API函数,便可间接配置寄存器。我们写程序控制STM32芯片,其实最终就是控制他的寄存器,使之工作在我们需要的模式下,HAL库将大部分寄存器的操作封装成了函数,我们只需要学习和掌握HAL库的结构和用法,就能方便地驱动STM32工作,以节省开发时间。

  • CMSIS标准

    CMSIS(微控制器软件接口标准),全称 Cortex Microcontroller Software Interface Standard ,是由ARM和其合作的芯片厂商、软件工具厂商,共同制定的标准。分为三层,从上到下,分别是用户层、中间层、硬件层。
    STM32-03-STM32HAL库_第1张图片

  • STM32F1结构框图

    STM32-03-STM32HAL库_第2张图片

2. STM32Cube固件包

  • 获取方法:www.st.com -> Tools & Software -> Ecosystem -> STM32Cube -> Prodcut selector -> STM32CubeF1

  • STM32CubeF1固件包的目录结构

    STM32-03-STM32HAL库_第3张图片

    在固件包的目录结构里面,我们重点关注驱动源码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

3. HAL库框架结构

  • 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中断中发生的错误,用于发生错误处理

4. 新建HAL版本MDK工程

  • 简要步骤

    1. 新建工程文件夹

      STM32-03-STM32HAL库_第4张图片

      文件夹名称 作用
      Drivers 存放与硬件相关的驱动层文件
      Middlewares 存放正点原子提供的中间层组件文件和第三方中间层文件
      Output 存放工程编译输出文件
      Projects 存放 MDK 工程文件
      User 存放HAL库用户配置文件、main.c、中断处理文件,以及分散加载文件
    2. 新建一个工程框架

      1. 新建工程
      2. 保存工程
      3. 选择主控芯片
      4. 删除文件夹
    3. 添加文件

      1. 设置工程名和分组名、
      2. 添加启动文件
      3. 添加User源码
      4. 添加SYSTEM源码
      5. 添加STM32F1xx_HAL_Driver源码
    4. 魔术棒配置

      1. Target选项卡:设置使用的编辑器版本、外部晶振频率
      2. Output选项卡:设置Objects输出文件夹、生成.hex文件、输出浏览信息
      3. Listing选项卡:设置Listing输出文件夹
      4. C/C++选项卡:设置全局宏定义、优化等级、C99 Mode、设置头文件包含路径
      5. Debug选项卡:设置使用的仿真器类型,选择的下载接口等
      6. Utilities选项卡:设置下载功能、下载算法、下载算法起始地址与大小等
      7. Linker选项卡:添加分散加载文件( 北极星/MiniPro H750)
    5. 添加main.c文件

声明:资料来源(战舰STM32F103ZET6开发板资源包)

  1. Cortex-M3权威指南(中文).pdf
  2. STM32F10xxx参考手册_V10(中文版).pdf
  3. STM32F103 战舰开发指南V1.3.pdf
  4. STM32F103ZET6(中文版).pdf
  5. 战舰V4 硬件参考手册_V1.0.pdf

你可能感兴趣的:(嵌入式,stm32,嵌入式硬件,单片机)