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

    文章

    3911

    浏览量

    61313
  • 应用软件
    +关注

    关注

    0

    文章

    46

    浏览量

    8961
收藏 人收藏

    评论

    相关推荐

    如何处理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编码中函数的规范

    加带来的代码拷贝和修改,随着时间的迁移,产品中堆砌着许多类似或者重复的代码。 ◎ 避免递归函数的代码块嵌套过深。 ◎ 对函数的错误返回码要全面处理。 说明:一个函数
    的头像 发表于 12-07 14:33 183次阅读

    如何绑架C语言标准库函数

    C语言动态内存可以使用 malloc 标准库函数,而 C++ 会使用 new 关键字申请,裸机情况下一般没有问题,但是在 RTOS 情况下,就需要考虑资源保护的情况,比如多个任务同时
    发表于 11-01 09:50 256次阅读

    如何绑架C语言标准库函数

    C语言动态内存可以使用 malloc 标准库函数,而 C++ 会使用 new 关键字申请,裸机情况下一般没有问题,但是在 RTOS 情况下,就需要考虑资源保护的情况
    发表于 11-01 09:50 132次阅读

    跑马灯实验-库函数

    电子发烧友网站提供《跑马灯实验-库函数.ppt》资料免费下载
    发表于 10-09 18:22 0次下载

    STM32库函数SystemInit()详解

    STM32库函数SystemInit()详解
    的头像 发表于 09-18 15:45 2007次阅读
    STM32<b class='flag-5'>库函数</b>SystemInit()详解

    CH32和stm32的库函数一样吗?

    CH32和stm32的库函数一样吗? STM32是ST公司推出的一款32位微控制器,其拥有强大的性能及丰富的外设功能,实现了嵌入式应用的功能。而在STM32的开发中,库函数是不可或缺的,因为它简化
    的头像 发表于 08-16 11:15 553次阅读

    如何在Vitis HLS GUI中使用库函数

    Vitis™ HLS 2023.1 支持新的 L1 库向导,本文将讲解如何下载 L1 库、查看所有可用功能以及如何在 Vitis HLS GUI 中使用库函数
    的头像 发表于 08-16 10:26 624次阅读
    如何在Vitis HLS GUI中使用<b class='flag-5'>库函数</b>?

    求分享STM32H743释放JTAG特殊引脚为普通IO的库函数

    HAL库里并没有描述释放 JTAG 特殊引脚为普通IO的库函数,求函数
    发表于 08-07 09:11

    用TIM的PWM输出模式写一个步进电机的Stepper库函数

    这是之前写平衡小车时自己用TIM的PWM输出模式写了一个步进电机的Stepper库函数
    的头像 发表于 07-24 14:36 1694次阅读
    用TIM的PWM输出模式写一个步进电机的Stepper<b class='flag-5'>库函数</b>

    基于STM32F407库函数开发按键控制LED灯

    STM32库函数实际是ST公司对寄存器开发封装。
    的头像 发表于 05-19 15:09 1585次阅读
    基于STM32F407<b class='flag-5'>库函数</b>开发按键控制LED灯