第8章.STM32开发方式(库函数)介绍

目录

0. 《STM32单片机自学教程》专栏

8.1 单片机的开发方式        

8.1.1 直接操作寄存器

8.1.2 使用库函数

8.2 STM32的库函数

8.2.1 标准外设库(STD库)

8.2.2 HAL库 

8.2.3 LL库 


0. 《STM32单片机自学教程》专栏

        本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:  

STM32单片机自学教程-[目录总纲]_stm32 学习-CSDN博客

8.1 单片机的开发方式        

图8.1-1 单片机开发方式 

        如图8.1-1,单片机开发常见的开发方式有两种:直接操作寄存器和使用库函数。我们在51单片机开发的时候就直接配置寄存器,但是到了32位单片机开发,如果开发大型项目,需要的功能外设很多,再使用这种方式就已经力不从心了。因为 STM32 的外设资源丰富,寄存器数量是51单片机寄存器的数十倍,那么多的寄存器根本无法记忆,而且开发中需要不停查找芯片手册,开发过程就显得机械和费力,完成的程序代码可读性差,可移植性不高,程序的维护成本变高了。当然了,采用直接配置寄存器方式开发会显得更直观,程序运行占用资源少。 下面将这两种方式的优缺点总结一下:

 图8.1-2 两种开发方式的优缺点 

8.1.1 直接操作寄存器

优点:

  1. 性能高:直接操作寄存器可以绕过库函数的调用和转换,直接对硬件进行操作,因此执行效率更高。
  2. 灵活性高:直接操作寄存器可以实现对硬件的底层控制,能够灵活地根据具体需求进行配置和操作。
  3. 深入理解硬件:通过直接操作寄存器,可以更深入地理解硬件的工作原理和内部机制,有助于提升个人的开发能力和经验。

缺点:

  1. 学习成本高:直接操作寄存器需要对硬件的底层结构和工作原理有较深的理解,对于初学者来说学习成本较高。
  2. 开发效率低:直接操作寄存器需要编写大量的底层代码,包括寄存器的配置、读写等,这会增加开发的工作量,降低开发效率。
  3. 可移植性差:直接操作寄存器是针对特定硬件的,当更换硬件或平台时,需要重写大量的底层代码,可移植性较差。

8.1.2 使用库函数

优点:

  1. 易于学习和使用:库函数提供了对硬件操作的封装,使得开发者无需深入了解硬件的底层细节,即可进行开发。这降低了学习成本,提高了开发效率。
  2. 可移植性好:库函数通常是跨平台的,可以在不同的硬件和操作系统上运行。因此,使用库函数开发的程序具有较好的可移植性。
  3. 较好的兼容性:库函数经过了严格的测试和验证,通常具有较好的兼容性和稳定性。

缺点:

  1. 性能较低:由于库函数需要进行封装和调用,相对于直接操作寄存器来说,执行效率可能会稍低一些。但在大多数情况下,这种性能差异是可以接受的。
  2. 灵活性受限:使用库函数进行开发时,可能会受到库函数功能的限制。如果库函数没有提供所需的功能,或者功能不满足具体需求,那么就需要进行底层开发或寻找其他解决方案。
  3. 依赖性强:使用库函数开发的程序通常依赖于特定的库文件或环境。如果更换库文件或环境,可能会导致程序无法正常运行或需要重新编译。因此,在使用库函数进行开发时,需要注意库文件的版本和兼容性等问题。

         目前现在大型项目开发里,肯定是推荐库函数方式。现在项目开发最重要的是“方便人”,方便产品的合作开发,而不再是“方便计算机”,封装越好越利于项目的开发,虽然封装越好运行速度越慢,但目前这个缺点可以忽略。我们平常开发时,有同事经常会说,计算机你就把它当成“一头驴”,不要管它累不累,我们自己不累才是现代项目该有的特征。

        虽然直接操作寄存器这种方式可以使我们更深入地理解硬件的工作原理和内部机制,有助于提升个人的开发能力,但STM32的学习过程却完全没必要按直接操作寄存器的方式去学习或者开发,我们只需要明白原理即可,了解了一种寄存器,其余寄存器操作方式也都是一样的。我们没必要在这上面耗费青春。

8.2 STM32的库函数

图8.2-1 STM32的库函数 

        为了简化开发人员的工作,减少开发工作时间和成本,针对STM32系列芯片,ST公司推出了标准外设库(STD库)、HAL库和LL库。在这些库中,有很多用结构体封装好的寄存器参数,有常用的表示参数的宏,还有封装好的对寄存器操作的API,开发者可以调用这些资源实现配置相应的寄存器,效率大大提高了。使用库的框架来开发,程序控制语句结构化,程序单元模块化,贴近人的思维,易于阅读,易于移植和维护。下面介绍一下3种库函数的区别。

图8.2-2 STM32各产品的库函数支持情况 

8.2.1 标准外设库(STD库)

        STD(StandardPeripheralLibraries)标准外设库,它把实现功能中需要配置的寄存器以结构体的形式封装起来,使用者只需要配置结构体变量成员就可以修改外设的配置寄存器,比直接操作寄存器方便了不少。但标准外设库仍然接近于寄存器操作,它的方便也是针对某一系列芯片而言,在不同系列芯片上使用标准外设库开发的程序可移植性比较差,例如,在F4上开发的程序移植到F3上,使用标准库是不通用的。目前STM32系列产品中仅F0-F4以及L1系列支持标准外设库。目前,对于较新的STM32系列,如STM32F7、STM32L4等,ST公司已经停止提供STD库的支持。这些新系列的MCU产品主要使用HAL库和LL库进行开发。

8.2.2 HAL库 

        为了解决标准库存在的问题,ST公司在标准库的基础上又推出了 HAL 库。这几年ST公司大力推广HAL 库,而且在ST新出的STM32 芯片中, ST直接只提供 HAL 库。HAL库取代之前的标准库已经是确定的趋势,HAL库也更符合现代项目的开发方式。
        HAL库在设计的时候更注重软硬件分离,HAL库的目的就是尽量抽离物理层,HAL库的API集中关注各个外设的公共函数功能,以便定义通用性更好的API函数接口,具有更好的可移植性。HAL库写的代码在不同的STM32产品上移植,非常方便,效率得到提升。目前HAL库支持STM32全系列微控制器,具有良好的跨平台支持。

8.2.3 LL库 

  • LL库(Low-Level Library)是STMicroelectronics在HAL库的基础上提供的更低级别的库。
  • 它提供了对底层寄存器和外设的更直接的访问,允许开发者编写更底层的代码,实现对微控制器和外设的精细控制。
  • LL库保留了更多的硬件细节,为开发人员提供了更高级别的灵活性和控制。
  • 相对于HAL库,LL库的执行效率可能更高,但使用难度也相应增加。
  • LL库适用于对性能和资源要求极高,以及对底层硬件控制有特殊需求的应用。 

        LL库是ST在HAL库的基础上提供的更低级别的库,是继HAL库之后新增的库,与HAL库捆绑发布。LL库也更接近硬件层,它和STD库类似,都是直接操作的寄存器,只不过LL库可以在STM32Cube中实现。LL库提供一组轻量级、优化、面向专家的API,具有最佳的性能和运行时效率。LL库可以完全独立使用,也可以结合HAL库一起使用。当HAL库需要优化运行时,可以调用LL库来处理,例如对于一些复杂的外设(如USB驱动),两者混合使用才能正常驱动这个复杂的外设。 

        我们本教程的目的是学习,为了对硬件和原理有更深入的理解,很明显采用STD库是更好的一种学习方式。我们的学习也基于标准库开展。 

参考资料:
        【1】哔站江协科技STM32入门教程

        【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著

        【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著

        【4】《STM32嵌入式微控制器快速上手》陈志旺著

        【5】《STM32单片机应用与全案例实践》沈红卫等著

        【6】《野火STM32开发指南》

        【7】《正点原子STM32开发指南》

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数据库调优-SQL语句优化

2. SQL语句优化 sql 复制代码 # 请问这两条SQL语句有什么区别呢?你来猜一猜那条SQL语句执行查询效果更好! select id from sys_goods where goods_name华为 HUAWEI 麦芒7 魅海蓝 6G64G 全网通; ​ select id from sys_goods where goods_id14967325985…

搜索的未来:OpenAI 的 GPT 如何彻底改变行业

搜索的未来:OpenAI 的 GPT 如何彻底改变行业 概述 搜索引擎格局正处于一场革命的风口浪尖,而 OpenAI 的 GPT 处于这场变革的最前沿。最近出现了一种被称为“im-good-gpt-2-chatbot”的神秘聊天机器人,以及基于 ChatGPT 的搜索引擎的传言&am…

MySQL索引(聚簇索引、非聚簇索引)

了解MySQL索引详细,本文只做整理归纳:https://blog.csdn.net/wangfeijiu/article/details/113409719 概念 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 索引分类 主键索引&#xff1a…

C++对象的赋值

同类的对象之间可以互相赋值,即一个对象的值可以赋值给另一个对象。对象之间的赋值通过“”进行。默认就是把一个对象所有非static数据成员的值依次赋值给另一个对象。 对象赋值的一般形式为: 对象名1 对象名2; 注意:对象名1和对象名2必须是属于同一个…

黑客如何进行IP伪装

在进行互联网访问时候,我们如果被查到IP访问记录,就能根据IP查到具体位置,如果从事非法事情就会被请去喝茶。那么IP是什么?为什么可以根据IP进行查找并且分析主机数据? IP是Internet Protocol(网际互连协议…

《TAM》论文笔记(上)

原文链接 [2005.06803] TAM: Temporal Adaptive Module for Video Recognition (arxiv.org) 原文代码 GitHub - liu-zhy/temporal-adaptive-module: TAM: Temporal Adaptive Module for Video Recognition 原文笔记 What: TAM: Temporal Adaptive Module for …

【数据结构与算法】堆

定义 堆是是一个完全二叉树,其中每个节点的值都大于等于或小于等于其子节点的值。这取决于是最大堆还是最小堆。 小根堆:每个根都小于子节点。 大根堆:每个根都大于子节点。 以下部分图例说明来源:【从堆的定义到优先队列、堆排…

Python修改exe之类的游戏文件中的数值

文章目录 场景查找修改 补充字节to_bytes 场景 某些游戏数值(攻击力、射程、速度…)被写在exe之类的文件里 要先查找游戏数值,然后修改 查找 首先,要查找数值,大数重复较少,建议从大数找起 F 游戏原件…

【系统架构师】-案例篇(五)企业应用系统集成与ESB

在航空业中,Ramp Coordination是指飞机从降落到起飞过程中所需要进行的各种业务活动的协调过程。通常每个航班都有一位员工负责Ramp Coordination,称之为RampCoordinator。由Ramp Coordinator协调的业务活动包括检查机位环境、卸货和装货等。 由于航班类…

企业如何做好数据安全治理?

在数字化时代,数据成为企业运营的核心资产,数据安全治理成为企业管理的重要组成部分。良好的数据安全治理不仅能保护企业信息不受侵犯,还能有效提升企业的运营效率和市场竞争力。下面是企业如何做好数据安全治理的几个关键步骤: 1…

【智能算法应用】基于麻雀搜索算法-支持向量回归预测(SSA-SVR)

目录 1.算法原理2.数学模型3.结果展示4.调试记录5.参考文献6.代码获取 1.算法原理 【智能算法】麻雀搜索算法(SSA)原理及实现 2.数学模型 支持向量机(SVM)是针对二分类问题,支持向量回归(SVR)基于SVM应用与回归问题。SVR回归与SVM分类的区…

【栈】Leetcode 验证栈序列

题目讲解 946. 验证栈序列 算法讲解 在这里就只需要模拟一下这个栈的出栈顺序即可:使用一个stack,每次让pushed里面的元素入栈,如果当前栈顶的元素等于poped容器中的当前元素,因此就需要让栈顶元素出栈,poped的遍历…

ArcGIS10.2能用了10.2.2不行了(解决)

前两天我们的推文介绍了 ArcGIS10.2系列许可到期解决方案-CSDN博客文章浏览阅读2次。本文手机码字,不排版了。 昨晚(2021\12\17)12点后,收到很多学员反馈 ArcGIS10.2系列软件突然崩溃。更有的,今天全单位崩溃。​提示许…

西米支付:数字藏品元宇宙的介绍与骗局套路解析

一、什么是元宇宙? 元宇宙是一个集体虚拟共享空间,由虚拟增强的物理现实和物理持久的虚拟空间融合而创造,包括所有虚拟世界、增强现实和互联网的总和。简单地说,元宇宙是Web3.0时期的数字世界。 这类新兴概念被非法分子包装后&am…

ssrf(第二弹)

四,post请求 1.打开环境,提示说发一个HTTP POST请求,ssrf是用php的curl实现的.并且会跟踪302跳转。 2.用dirsearch扫一下常见的端口,看到有三个可以访问的页面 3.构造伪协议,因为要通过172.0.0.1访问,我们…

TikTok shop多账户需要防关联吗?

TikTok是一个非常垂直的平台,每个账号的内容都应该尽可能的垂直,这样平台才能引流更多的流量。但是,TikTokShop只有一两个账号,流量往往难以保证,所以很多商家选择了TikTok的多账号运营模式。 众所周知,多店…

数字音频的采样和量化

一.PCM(Pulse-Code Modulation 脉冲编码调制) PCM是一个无损无压缩的(相较于有损压缩,如果相对于模拟信号是有损的)数字化编码方式(PCM不单单应用于音频领域,本文只介绍在音频领域中的应用&…

GAMMA Lab——知识图谱和LLM大模型

图机器学习的发展与分类 图基础模型 LLM基础模型 GNN LLM 前沿工作

【智能算法】正切搜索算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年,A Layeb受到正切函数启发,提出了正切搜索算法(Tangent Search Algorithm, TSA)。 2.算法原理 2.1算法思想 TSAT基于正切函数的数学…

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…