STM32-03-STM32HAL库

发布时间:2024年01月06日

STM32HAL库

1. HAL库介绍

  • HAL库

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

  • CMSIS标准

    CMSIS(微控制器软件接口标准),全称 Cortex Microcontroller Software Interface Standard ,是由ARM和其合作的芯片厂商、软件工具厂商,共同制定的标准。分为三层,从上到下,分别是用户层、中间层、硬件层。
    请添加图片描述

  • STM32F1结构框图

    在这里插入图片描述

2. STM32Cube固件包

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

  • STM32CubeF1固件包的目录结构

    在这里插入图片描述

    在固件包的目录结构里面,我们重点关注驱动源码Drivers),中间文件Middlewares),ST官方开发板例程Projects)三个文件夹。

    1. 驱动源码Drivers):

    文件夹子文件作用
    DriversBSP板级支持包,用于适配ST官方的开发板(可参考)
    CMSIS符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等
    STM32F1xx_HAL_DriverHAL库外设驱动源码,包括F1系列HAL库源文件和头文件

    2. 中间文件Middlewares):

    MiddlewaresSTSTemWinSTemWin工具包
    STM32_USB_Device_LibraryUSB从机设备支持包
    STM32_USB_Host_LibraryUSB主机设备支持包
    Third_PartyFatFsFAT文件系统支持包
    FreeRTOSFreeRTOS实时系统支持包
    LwIPLwIP网络通信协议支持包

    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.hHAL库初始化、系统滴答、HAL库延时等相关函数
    stm32f1xx_hal_conf.hHAL库的用户配置文件,用于裁剪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.hLL库驱动源码,在部分STM32f1xx_hal_ppp.c 或stm32f1xx_hal_ppp_ex.c 中会被调用
  • 库文件中API函数和变量的命名规则

    文件名称stm32f1xx_hal_ppp.(c/h)stm32f1xx_hal_ppp_ex.(c/h)
    函数名HAL_PPP_FunctionHAL_PPPEx_Function
    外设句柄PPP_HandleTypeDef
    外设工作参数 初始化结构体PPP_InitTypeDefPPP_InitTypeDef
    配置参数结构体PPP_ YyyyConfTypeDefPPP_ 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. 新建工程文件夹

      在这里插入图片描述

      文件夹名称作用
      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
文章来源:https://blog.csdn.net/Lshuangye/article/details/135422816
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。