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和其合作的芯片厂商、软件工具厂商,共同制定的标准。分为三层,从上到下,分别是用户层、中间层、硬件层。
    请添加图片描述

  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】在开启ssh和sshd状态下,XShell无法连接到VMware虚拟机中的Linux操作系统

【已解决】在开启ssh和sshd状态下,XShell无法连接到VMware虚拟机中的Linux操作系统 XShell无法连接到VMware虚拟机中的Linux操作系统,今天上线突然发现XShell无法连接到VMware虚拟机中的Linux操作系统,但是找了很多解决方案都没有解决&#x…

【图像拼接/视频拼接】论文精读:Seamless Video Stitching from Hand-held Camera Inputs(LPVW)

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

00. 目录 文章目录 00. 目录01. 定时器中断相关API1.1 TIM_InternalClockConfig1.2 TIM_TimeBaseInit1.3 TIM_TimeBaseInitTypeDef1.4 TIM_ClearFlag1.5 TIM_ITConfig1.6 TIM_Cmd1.7 中断服务函数1.8 TIM_ETRClockMode2Config 02. 定时器定时中断接线图03. 定时器定时中断示例0…

命令行模式的rancher如何安装?

在学习kubectl操作的时候,发现rancher也有命令行模式,学习整理记录此文。 说明 rancher 命令是 Rancher 平台提供的命令行工具,用于管理 Rancher 平台及其服务。 前提 已经参照前文安装过了rancher环境了,拥有了自己的k8s集群…

html5中各标签的语法格式总结以及属性值说明

有关闭标签的元素 a元素 <a href"" target"" title""></a>表格相关元素 table元素&#xff1a;表格标签caption元素&#xff1a;表头thead元素tbody元素&#xff1a;表格主体元素tfoot元素th元素tr元素&#xff1a;行标签td元素&…

centoss7安装mysql详细教程

【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客 【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客 【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客

VMware17 下载安装教程

VMware17 下载安装ubuntu22.04虚拟机安装 一、VM安装 1.打开官方下载地址&#xff1a;https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 跳转页面后&#xff0c;点击左边的Download oad now&#xff0c;下载的就是最新版的 Workstation 17 …

[元带你学: eMMC协议 31] CRC 错误检测保证可靠性

依公知及经验整理,原创保护,禁止转载。 专栏 《元带你学: eMMC 协议》 <<<< 返回总目录 <<<< 前言 图片来源: www.elprocus.com 对于 eMMC 存储设备,CRC 校验在数据传输过程中起到了重要的作用。它能够检测出数据在存储和传输过程中的错误,确保…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和…

机械臂运动学逆解(牛顿法)

机械臂运动学逆解&#xff08;牛顿法&#xff09; 常用的工业6轴机械臂采用6轴串联结构&#xff0c;虽然其运动学正解比较容易&#xff0c;但是其运动学逆解非常复杂&#xff0c;其逆解的方程组高度非线性&#xff0c;且难以化简。   由于计算机技术的发展&#xff0c;依靠其…

其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)

本篇博客主要详细讲解一下其他排序&#xff08;基数排序&#xff0c;希尔排序和桶排序&#xff09;也是排序综合系列里最后一篇博客。第一篇博客讲解的是LowB三人组&#xff08;冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff09;&#xff08;数据结构课设篇1&…

CentOS:安装gitlab

1、安装依赖 yum install -y curl policycoreutils-python openssh-server #centos8没有policycoreutils-python yum源&#xff0c;不用管 2、启动ssh并设置为开机自启动 systemctl enable sshd systemctl start sshd 3、安装Postfix来发送通知邮件。 yum install postfix…

【大数据进阶第三阶段之Hive学习笔记】Hive常用命令和属性配置

目录 1、Hive安装 2、HiveJDBC访问 2.1、启动hiveserver2服务 2.2、连接hiveserver2服务 2.3、注意 3、Hive常用交互命令 3.1、“-e”不进入hive的交互窗口执行sql语句 3.2、“-f”执行脚本中sql语句 4、Hive其他命令操作 4.1、退出hive窗口 4.2、在hive cli命令窗口…

OpenSSL——升级

OpenSSL&#xff08;Open Secure Sockets Layer&#xff09;是一个开源的软件库&#xff0c;提供了SSL和TLS协议的实现&#xff0c;用于加密通信。它广泛用于安全连接&#xff0c;例如在网站上通过HTTPS协议进行安全的数据传输. 但是从openssl申请道德证书是不安全的。对于网站…

第10课 实现多对多音视频会议功能

在前两节课&#xff0c;我们将推流端与播放端合并为一对一音视频聊天功能并解决了关键的回声问题&#xff0c;在此基础上&#xff0c;我们可以进一步改进实现多对多的视频会议功能。 1.备份demo9并修改demo9为demo10。 2.打开工程文件&#xff0c;修改mfc为四分屏画面。 界面…

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i&#xff0c;进入编辑模式 6、把用户的ID改成跟r…

CSS 实现两个圆圈重叠部分颜色不同

这是期望实现的效果&#xff0c;由图可知&#xff0c;圆圈底图透明度是0.4&#xff0c;左侧要求重叠部分透明度是0.7&#xff0c;所以不能通过简单的透明度叠加来实现最右侧的效果。 这就需要另外新建一个图层来叠加在两个圆圈重叠上方。 直接看代码 .circle_hight {width: 1…

stm32引脚输入输出设置寄存器操作汇总

下图时正点原子i2c时使用的宏定义 下面的代码是对PA0-PH15的引进行了穷举法代码&#xff0c;使用的时候只需要拷贝三行相应的引脚即可。 //IO方向设置 #define IIC_SDA PAout(0) //SDA #define SDA_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA->CRL|(u32)8<<0…

gitlab 配置 二

一 环境说明 群晖Nas DS418DELL XPS serverGitlab ce 二 需要实现的功能 外网可以访问&#xff0c;gitlab使用https的方式访问。wiki issue 等都可以上传图片和附件。 三 操作步骤 因为群晖上有证书&#xff0c;并且由群晖做转发功能。因此证书上&#xff0c;采用群晖的证书…

Linux目录结构及路径描述方式

1.Linux目录结构 Linux与Windows不同&#xff0c;Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面 2.Linux路径的描述方式 在Linux系统中&#xff0c;路径之间的层级关系&#xff0c;使用&#xff1a;/ 来表示 在Windows系统中&#xff0c;路径之间的层级关系…