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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实(Augmented Reality,AR)中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff…

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础…

添加jdk 11到环境变量的一种方法

添加jdk 11到环境变量的一种方法 1.jdk11可以直接在android studio 中下载, File --> Settings --> Build, Execution, Deployment --> Build Tools --> Gradle 下载jdk 11 ,确认好下载路径 2.jdk11 添加到环境变量添加到环境变量 多个…

【AI视野·今日NLP 自然语言处理论文速览 第六十六期】Tue, 31 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 31 Oct 2023 (showing first 100 of 141 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Eval4NLP 2023 Shared Task on Prompting Large Language Models a…

日程安排小程序实战教程

日常中我们经常有一些事情需要提醒自己,使用日历的形式比较符合实际的使用习惯。本篇我们就利用微搭低代码工具带着大家开发一款日程安排的小程序。 1 创建数据源 登录微搭低代码控制台,打开数据模型,点击创建 输入数据源的名称日程安排 …

Erupt即开即用的后台管理系统【告别前端代码】

一、引子 【零前端代码,几行Java注解,搞定后台管理系统】 如果只是自己内部公司使用的话,大多数功能都可以满足,剩下的就是自己添砖加瓦了。 我用这个主要是简单快捷,10分钟搭建一个简易的后台管理系统。 二、基本…

【精通C语言】:深入解析C语言中的while循环

🎥 屿小夏 : 个人主页 🔥个人专栏 : C语言详解 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、while循环1.1语法1.2 执行过程解析1.3 break1.4 continue 🌤️全篇总结 &…

ssm基于vue.js的购物商场的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装购物商场软件来发挥其高效地信息处理的作用,可以…

Notepad++ v7.7.1 安装及添加插件

1、notepad_v7.7.1.zip npp.7.7.1.Installer.x64.exe npp.7.7.1.Installer.x86.exe notepad_v7.7.1.ziphttps://www.123pan.com/s/VTMXjv-X6H6v.html 2、notepad插件包_64bit_4.zip ComparePlugin ---->文件对比插件 ComparePlugin.dllNppFTP ---->FTP、FTPES和SFTP …

软件测试/测试开发丨Selenium 高级控件交互方法

一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件(了解即可) www.selenium.dev/documentati… 二、ActionChains解析 实例化类ActionChains,参…

bootstrap5实现宠物商店网站 Cat-Master

一、需求分析 宠物商店网站是指专门为宠物商店或宠物用品商家而建立的在线平台。这种网站的功能通常旨在提供以下服务: 产品展示:宠物商店网站通常会展示宠物食品、玩具、床上用品、健康护理产品等各种宠物用品的图片和详细信息。这样,潜在的…

IP2312U_VSET 5V 2A 单节锂电池同步开关降压充电IC

IP2312U是一款5V输入,支持单节锂电池同步开关降压充电管理的IC。 IP2312U集成功率MOS,采用同步开关架构, 使其在应用时仅需极少的外围器件,并有效减小整体方案的尺寸,降低BOM 成本。 IP2312U的升压开关充电转换器工作频…

PromptCast:基于提示学习的时序预测模型!

目前时序预测的SOTA模型大多基于Transformer架构,以数值序列为输入,如下图的上半部分所示,通过多重编码融合历史数据信息,预测未来一定窗口内的序列数值。 受到大语言模型提示工程技术的启发,文章提出了一种时序预测新…

未来人工智能技术发展趋势

近年来,人工智能技术在全球范围内得到了快速的发展和广泛的应用。随着技术的不断进步和创新,未来人工智能技术将会呈现出哪些发展趋势呢?本文将会从以下几个方面进行分析。 1. 多模态融合 未来的人工智能技术将会更加注重多模态数据的融合&…

如何正确安装Axure插件?详细步骤分享

产品经理在使用Axure导出html文件时,如果选择“完成后打开浏览器”,浏览器往往无法识别。此时,我们需要使用Axure官方谷歌浏览器插件直接访问浏览器中的本地html项目,否则我们需要上传到AxureCloud或使用软件本身的预览功能。接下…

玩转Mysql 三(权限管理)

一、用户管理 1、登录MySQL服务器 语法示例: mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句" 详细命令中参数说明: -h参数 后面接主机名或者主机IP,hostname为主机,hostIP为主机…

Allegro如何进行四层板板层设计

Allegro如何进行四层板板层设计 板层设计说明 在进行多层板设计时我们画好PCB板框后,都要进行板层的设计。这里就以最简单的4层板为例为大家举例说明。 板层设置 点击“Setup”->“Cross Section Editor”如下图所示: 也可以直接点击工具栏进入…

期货日数据维护与使用_日数据维护_模块运行演示

写在前面: 本文默认已经创建了项目,如果不知道如何创建一个空项目的,请参看以下两篇博文 PyQt5将项目搬到一个新的虚拟环境中 https://blog.csdn.net/m0_37967652/article/details/122625280 python_PyQt5开发工具结构基础 https://blog.cs…

C++矩阵例题分析(3):螺旋矩阵

一、审题 时间限制:1000ms 内存限制:256MB 各平台平均AC率:14.89% 题目描述 输出一个n*n大小的螺旋矩阵。 螺旋矩阵的样子: 输入描述 共一行,一个正整数n,表示矩阵变长的长度…

vue+springboot项目上传部署tomcat

下载及安装Tomcat 进入tomcat官网,Tomcat官网 选择需要下载的版本,点击下载下载路径一定要记住,并且路径中尽量不要有中文 下载后是压缩包 .zip,解压后 tomcat系统各个文件夹目录是什么意义: bin:放置的是…