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

    文章

    4406

    浏览量

    66838
  • 应用软件
    +关注

    关注

    0

    文章

    53

    浏览量

    9375
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LUA例程-常用的回调函数使用说明

    详细说明LUA脚本函数功能和对应的应用实例。对于LUA脚本编程有很大的帮助和提高技能。
    发表于 11-24 16:43 0次下载

    单片机启动&库函数的构成

    文件中找到那个叫SystemInit的东西,这是个函数名字,一般来讲都可以在厂商提供的库函数中找到,cw32的在下面这个图的文件里 5.在执行完SystemInit函数的这三行代码之后,单片机
    发表于 11-18 08:15

    深度剖析Nios II 处理器的硬件抽象层

    )与ANSI C标准库综合在一起,可使用类似C语言的库函数来访问硬件设备或文件,如printf()、fopen()、fwrite()等函数。软件工程师可非常方便的使用这些函数来与底层硬
    的头像 发表于 10-31 15:25 4520次阅读
    深度剖析Nios II 处理器的硬件抽象层

    在rtthread的main函数里用HAL_Delay函数不起作用是哪里的问题?

    在rtthread的main函数里用HAL_Delay函数无效,我设置延时500ms打印一次,但是实际上,一秒打印了几百次,很显然是HAL_Delay出现了问题。用RT_thread_
    发表于 09-15 07:53

    STM32 学习达标标准:4 个维度,判断你是否真正合格

    最近在网址经常看到这样的帖子:STM32怎么就算是精通了、怎么就是完全入门了、要学到什么程度才算合格?老实说,这事真没绝对标准,但只懂外设原理、会调用库函数肯定只是入门级。就像学开车,知道方向盘刹车
    的头像 发表于 08-11 16:36 530次阅读
    STM32 学习达标<b class='flag-5'>标准</b>:4 个维度,判断你是否真正合格

    详解hal_entry入口函数

    当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry函数。由
    的头像 发表于 07-25 15:34 1662次阅读

    求CS32A010K8V7的库函数使用教程

    请问有CS32A010K8V7的库函数使用教程吗,官网的库函数自带的文字说明感觉不是很看得明白呢
    发表于 07-18 23:20

    自己写库:构建库函数雏形

    实际上,构建固件库是一件费时费力的事情,并且它对开发者对芯片的熟悉程度有一定的要求。甚至,当一个固件库的封装程度很高时,想要阅读并理解该固件库的底层代码也会变成一件有较高难度的事情。瑞萨RA系列单片机所使用的官方FSP库便是这样的一种封装程度很高的固件库。所幸的是,FSP库的意义在于为开发者封装硬件底层,因此一般而言,FSP库是带来方便的,开发者只需学会如何使用FSP库即可,而不用深入到FSP库的底层细节。
    的头像 发表于 06-19 11:19 900次阅读
    自己写库:构建<b class='flag-5'>库函数</b>雏形

    MSP430常用内联函数说明

    电子发烧友网站提供《MSP430常用内联函数说明.docx》资料免费下载
    发表于 06-05 17:20 0次下载

    ZYNQ FPGA的PS端IIC设备接口使用

    zynq系列中的FPGA,都会自带两个iic设备,我们直接调用其接口函数即可运用。使用xilinx官方提供的库函数,开发起来方便快捷。
    的头像 发表于 04-17 11:26 1751次阅读
    ZYNQ FPGA的PS端IIC设备接口使用

    STM32的几种开发方式,你都知道吗?(可下载)

    经常有人会问,你们 STM32 编程是用库函数 还是用寄存器的...会说库函数方便,容 易,都用库函数...等等这样的问题,今天我们就来 dis 一下这几种编程方式,STM32 编程 目前常见的几种
    发表于 04-03 11:24 0次下载

    详解RTOS中的Hook函数

    Hook函数是RTOS中的一个关键特性,通过该函数,用户可以增强对任务管理的控制,定义系统行为。
    的头像 发表于 03-24 16:14 838次阅读

    SPC560B无法使用sprintf vsnprintf等c库函数是怎么回事?

    SPC560B无法使用sprintf vsnprintf等c库函数
    发表于 03-14 12:09

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现?

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现
    发表于 03-07 17:05