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.hqwc.cn/news/327782.html

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

相关文章

LiveGBS流媒体平台GB/T28181功能-用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色

LiveGBS功能用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色 1、用户管理2、添加用户3、关联通道3.1、只看已选3.2、只看未选 4、自定义角色5、搭建GB28181视频直播平台 1、用户管理 LiveGBS支持用户管理,添加用户,及配置相关用户权…

书摘:C 嵌入式系统设计模式 06

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述原书第 2 章的内容。 作为嵌入…

Kali Linux——获取root权限

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

【C语言】关闭socket需要包含的头文件

一、问题 linux系统&#xff0c;包含了头文件<sys/socket.h>&#xff0c; 警告 warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] close(sockclient); ^~~~~ pclose 二、解决 在 Linux 系统下…

常用的窗体控件

常用窗体控件 MenuStrip&#xff1a;一个标准的菜单栏控件&#xff0c;可以添加菜单单项和子菜单项 //双击子菜单项同样可以添加点击事件 //menu&#xff1a;菜单 item&#xff1a;菜单选项 //当点击新建选项的时候触发的事件 private void 新建ToolStripMenuItem_Click(ob…

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

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

嵌入式项目——平衡小车(1)

焊接 驱动板需要焊接的如上图。 陀螺仪8pin排母电机两路排线插口。(个别同学需要焊接)两个电池仓,注意电池仓分正反。 安装 底部电池板 4个 双通尼龙柱M3*224个 尼龙螺钉M3*6电机驱动板

Linux引导过程与服务控制

目录 一、操作系统引导过程 1. 过程图示 2. 步骤解析 2.1 bios 2.2 mbr 2.3 grup 2.4 加载内核文件 3. 过程总结 4. centos6和centos7启动区别 5. 小结 二、服务控制及切换运行级别 1. systemd核心概念 2. 运行级别 3. 运行级别所对应的Systemd目标 4. Systemd…

[SAP ABAP] ABAP基础语法

ABAP(Advanced Business Application Programming)是一种编程语言&#xff0c;用于SAP软件的开发和定制 SAP ABAP是一种高级语言&#xff0c;主要用于在SAP平台上为大型企业和金融机构开发企业应用程序 1. ABAP基本语法结构 ABAP源程序由注释和ABAP语句组成&#xff0c;其中…

设计模式② :交给子类

文章目录 一、前言二、Template Method 模式1. 介绍2. 应用3. 总结 三、Factory Method 模式1. 介绍2. 应用3. 总结 参考内容 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书&qu…

QT c++和qml交互实例

文章目录 一、demo效果图二、c和qml交互的基本方式1、qml访问C类对象 三、关键代码1、工程结构图2、c代码MainWindow.cppMainQuickView.cppStudentInfoView.cppStudentInfoModel.cpp 3、qml代码main.qmlMainQuickTopRect.qmlMainQuickMiddleRect.qmlMainQuickMiddleTableRect.q…

3C电子制造:智慧物流引领产业升级

在当今科技飞速发展的时代&#xff0c;3C电子制造行业正面临着一系列挑战和机遇。市场需求的多变和技术革新的加速&#xff0c;使得企业必须不断创新和升级。在这个过程中&#xff0c;智慧物流成为了一个关键的环节&#xff0c;它能够有效地提高生产效率、降低成本并增强企业的…

环形缓冲区优点及实现

环形缓冲区优点及实现 目录 环形缓冲区优点及实现一、环形缓冲区概念二、环形缓冲区优点1、一个有缺陷的数据读写示例2、使用环形缓冲区解决数据读写缺陷 三、环形缓冲区实现代码 一、环形缓冲区概念 环形缓冲区是一种特殊的缓冲区&#xff0c;其读指针和写指针都指向同一个缓…

【Docker】容器的相关命令

上一篇&#xff1a;创建&#xff0c;查看&#xff0c;进入容器 https://blog.csdn.net/m0_67930426/article/details/135430093?spm1001.2014.3001.5502 目录 1. 关闭容器 2.启动容器 3.删除容器 4.查看容器的信息 查看容器 1. 关闭容器 从图上来看&#xff0c;容器 aa…

Java-网络爬虫(二)

文章目录 前言一、WebMagic二、使用步骤1. 搭建 Maven 项目2. 引入依赖 三、入门案例四、核心对象&组件1. 核心对象SipderRequestSitePageResultItemsHtml&#xff08;Selectable&#xff09; 2. 四大组件DownloaderPageProcessorSchedulerPipeline 上篇&#xff1a;Java-网…

YOLOv5改进 | 损失篇 | VarifocalLoss密集检测专用损失函数 (VFLoss,论文一比一复现)

一、本文介绍 本文给大家带来的是损失函数改进VFLoss损失函数,VFL是一种为密集目标检测器训练预测IoU-aware Classification Scores(IACS)的损失函数,我经过官方的版本将其集成在我们的YOLOv8的损失函数使用上,其中有很多使用的小细节(否则按照官方的版本使用根本拟合不了…

计算机Java项目|基于SpringBoot+Vue的图书个性化推荐系统

项目编号&#xff1a;L-BS-GX-10 一&#xff0c;环境介绍 语言环境&#xff1a;Java: jdk1.8 数据库&#xff1a;Mysql: mysql5.7 应用服务器&#xff1a;Tomcat: tomcat8.5.31 开发工具&#xff1a;IDEA或eclipse 二&#xff0c;项目简介 图片管理系统是一个为学生和…

移动通信原理与关键技术学习(第四代蜂窝移动通信系统)

前言&#xff1a;LTE 标准于2008 年底完成了第一个版本3GPP Release 8的制定工作。另一方面&#xff0c;ITU 于2007 年召开了世界无线电会议WRC07&#xff0c;开始了B3G 频谱的分配&#xff0c;并于2008 年完成了IMT-2000&#xff08;即3G&#xff09;系统的演进——IMT-Advanc…

第1章 线性回归

一、基本概念 1、线性模型 2、线性模型可以看成&#xff1a;单层的神经网络 输入维度&#xff1a;d 输出维度&#xff1a;1 每个箭头代表权重 一个输入层&#xff0c;一个输出层 单层神经网络&#xff1a;带权重的层为1&#xff08;将权重和输入层放在一起&#xff09; 3、…

【STM32】RTC实时时钟

1 unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区…