0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

标准库函数与基于HAL库函数的说明

电子设计 来源:电子设计 作者:电子设计 2020-12-25 16:47 次阅读

开始学习51的时候有的人会直接选择进行对单片机寄存器进行操作,可以很好的理解单片机的工作原理,对于代码的编写也会后很好的理解,但是在stm32的时候操作寄存器就不太行了,因为stm32的寄存器是51的数十倍,如此多的寄存器根本无法全部记忆,开发时需要经常的翻查芯片的数据手册,此时直接操作寄存器就变得非常的费力了。这是我们就有了其他的操作方式,来简化我们的工作。

一、标准库

STM32有非常多的寄存器,导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx……之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。也是目前最多人使用的方式,也是学习STM32接触最多的一种开发方式。

二、HAL库

HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,但使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有。而且使用ST公司研发的STMcube软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极。

三、库函数与HAL库对比

1.串口通信实验库函数部分代码

HAL函数代码

2.库函数与HAL库比较库函数配置好串口以后,当串口接收到数据再发送给上位机时需要循环发送,但是HAL库就直接调用HAL_UART_Transmit函数就能直接将串口的数据发给上位机。库函数不免比HAL更加的麻烦。库函数的串口通信函数只适用于STM32F1系列,对于其他系列的就不能通用了;但是对于HAL库来说,只要外设相同,基本上能够很容易的移植。可以说HAL库就是用来取代之前的标准外设库的。

总结

相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。对于我们这种水平的新手而言,HAL更加的友好,可以降低我们开发的门槛,但是如果想要更好的理解代码实现的原理以及对寄存器的调用原理,标准库更好的理解,可能相对较难,但是理解代码的实现也是我们必须的。

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62586
  • 应用软件
    +关注

    关注

    0

    文章

    51

    浏览量

    9082
收藏 人收藏

    评论

    相关推荐

    HAL库的函数调用示例

    HAL(Hardware Abstraction Layer,硬件抽象层)库是STM32等微控制器中常用的库,它为开发者提供了访问和控制硬件设备的接口。以下是一些常用的HAL库函数及其调用示例: 一
    的头像 发表于 12-02 14:01 342次阅读

    stm32的官方库函数有步进电机的那个脉冲函数吗?

    stm32的官方库函数有步进电机的那个脉冲函数吗,还是说要自己编写
    发表于 07-23 06:37

    手把手带你移植HAL库函数

    开发者更高效地进行嵌入式开发。手把手带你移植HAL库函数HAL库提供了一套抽象接口,使开发者无需直接操作底层硬件寄存器,就能实现对硬件的控制。这种抽象使得代码能够更
    的头像 发表于 05-18 08:04 1885次阅读
    手把手带你移植<b class='flag-5'>HAL</b><b class='flag-5'>库函数</b>

    stm32f072如何在keil里面创建寄存器函数的工程而非库函数

    stm32f072如何在keil里面创建 寄存器函数的工程而非库函数
    发表于 05-17 07:21

    怎么开始学习stm8l的库函数

    我之前用的都是51单片机,虽然有上过stm32的课但是当时忙于考研基本没学,对库函数根本不了解,现在我参加一个需要用stm8l做环境检测和无线组网的项目,想知道该怎么快速上手stm8l。应该怎么开始学习stm8l的库函数,各位有没有好的方法或者教程、书籍推荐?
    发表于 05-11 08:12

    调用STM8S的库函数的时候为什么老是出错?

    各位大神,调用STM8S的库函数的时候为什么老是出错,求指教,我把整个工程文件上传上来了,用的是STVD-4.3.1的软件,希望懂的人指出错误,并教怎么解决,如果可以的话,还希望给出正确调用库函数的方法,,万分感谢!!!!!
    发表于 05-10 08:23

    STM32 CAN用库函数在发送时遇到的疑问求解

    STM32 CAN用库函数在发送时,作这样处理:标准ID<<21,扩展ID<<3位。那么如果用这种方式发送报文到一个其他设备(比如汽车里某个
    发表于 05-06 08:40

    请问为什么库函数头文件和寄存器头文件不可共用?

    我现在学着库函数编程,我想边学库函数边学寄存器,例如做完库函数编程后我想把CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);这个分频函数换成寄
    发表于 04-28 06:22

    请问为什么非main.c的其他文件能调用库函数

    在main.c中调用库函数我可能理解: 是因为在main.c中引用了#include \"sys.h\"头文件,而这个头文件包含了各库函数的定义声明。 但其他文件诸如这样
    发表于 04-25 06:49

    如何处理STM32的HAL库函数返回异常问题?

    STM32运行死机了,是很可能可以在这种 库函数运行返回值不是 HAL_OK 中进行故障定位的。 (3)问题是 一旦出现了这种返回值异常的错误,记录在哪里比较好?芯片自带FLASH区域?EEPROM?在
    发表于 04-17 06:39

    hal库函数进行spi dma发送和接收函数读取设备函数一直为0xFF的原因?

    我用hal库函数进行spi dma发送和接收函数读取设备函数一直为0xFF,不清楚问题出现在哪里,我感觉是片选问题,但不知道怎么排查
    发表于 04-03 06:58

    库函数硬件nss有使能spi函数SPI_Cmd(),但是HAL库没有找到,怎么使用硬件NSS呢?

    库函数硬件nss有使能spi函数SPI_Cmd(),但是HAL库没有找到,怎么使用硬件NSS呢? 以及主机选择硬件nss怎么片选从机?是直接发送不用管嘛? 从机选择硬件nss怎么接收数据,怎么进入中断?
    发表于 03-28 10:01

    关于SDIO HAL库函数的疑问求解

    , 64U); 3、在读写块操作时,标准卡的地址为什么要乘以512? 例如函数HAL_SD_WriteBlocks里 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) { add
    发表于 03-26 07:03

    TC397怎么添加标准C库函数

    想使用一些标准的C库函数,如math.h中的一些sin,cos等函数,但是不知道怎么添加,请问有人操作过这种吗,请赐教。
    发表于 02-02 08:04

    学习笔记分享|使用C库函数控制ELF 1开发板的LED

    (ELF1/ELF1S开发板及显示屏)在嵌入式Linux系统开发中,通过编程控制硬件资源是至关重要的技能之一,今天跟各位小伙伴分享一篇专注于介绍如何使用C库函数控制ELF1开发板LED的学习笔记
    的头像 发表于 01-19 11:12 561次阅读
    学习笔记分享|使用C<b class='flag-5'>库函数</b>控制ELF 1开发板的LED