• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

HAL库函数版本和库函数版本、寄存器版本之间是什么关系

0ff23a3c967f6c7e 2019-11-18 浏览量:8163
HAL库函数版本和库函数版本、寄存器版本之间是什么关系
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 最原始的操作芯片的方式是:直接操作地址,在地址的基础上,芯片厂家一般都会封装一层寄存器,寄存器本质就是基地址+偏移地址的形势来进行封装,方便用户操作。然而使用寄存器方便了操作,即使是寄存器的名字起得比较通俗易懂,但碰到比较复杂的功能,要同时操作好多个寄存器配合,才能使用这个功能的话,寄存器就又有些麻烦了,于是就诞生了库,最开始ST推出的是标准库,也就是你所说的库函数版本,库的出现就大大简化了配置过程,让用户可以更快进行配置,只需要学习用那个函数就可以了,而且库函数的名字可以起得非常直接,按照功能起名字就可以。

    在近年来,ST专注于把生态做好,也就是说整个ST芯片的生态环境,为了提高可移植性,以及方便用户更加脱离硬件,更专注与软件开发,HAL库与CUBEMX应运而生,用户可以通过CUBEMX软件来直接进行图形化的配置,然后直接生成HAL库的程序,大大简化了芯片的初始化过程。当然,HAL库的臃肿也是无可避免的,因为HAL库首先的目标就是可移植性与脱离硬件,因此HAL库在一些地方上会比标准库更多一层封装,比如中断回调函数,HAL库把同类型的中断都全部归类到一起,调用一个回调函数,也就是又多了一层封装。

    由于HAL库的臃肿,ST又想办法开发了LL库,在CUBEMX5.0以上版本已经可以直接选择HAL库或者LL库,LL库的操作更加接近寄存器操作,而且与HAL库是可以同时存在的。当然HAL库与LL库还是有bug的,HAL经过这么多版本的更新,bug已经稍微少了点,LL库还是有待完善的。

    目前,ST已经明说了,以后不会再更新标准库,专注于HAL库,CUBEMX,因此,如果后续会经常使用ST的芯片,HAL库是有必要熟悉一下的。

    说到这,应该就会明白,在代码的执行效率上大致是这样的,直接操作地址无疑是最快的,其次是寄存器操作,其次是LL库操作,然后是标准库,然后是HAL库。

    针对于开发效率与执行效率,当然也是可以兼得的,HAL库的优势在于可以使用CUBEMX进行图形化配置,那么用这个进行功能初始化操作就会很快,很方便,在程序功能实现方面,使用寄存器或LL库,程序执行效率会更高,不过LL库还不是很完善,慎用吧

    • 发布于 2019-11-18
    • 举报
    • 评论 2
    • 0
    • 0
5967ca0a478a156a 回复了 KVIN:真辛苦啊111 回复
KVIN 回复了 KVIN:还好吧,可能是写论文写多了,不知不觉就写这么多 回复

其他答案 数量:8
  • 现在开发STM32系列,其实有3个库或者说4个库,

    一个是标准库,一个是HAL库,一个是LL库,还有一个是真正底层的寄存器版本。

    其实寄存器版本是底层,它适合与类似汇编的编程,算是最简单的封装

    标准库在其上进一步封装成更适合使用(阅读理解)的,供C语言调用

    HAL和LL是进一步的封装,它进一步抽象了,可以一定程度屏蔽不同STM32 类型间关系,使得上层代码更好复用。

    • 发布于2019-11-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 寄存器操作就是直接给寄存器赋值来达到某个操作目的的方式

    库函数就是将很多个寄存器操作封装起来,你只要使用函数,填好参数就能达到更加复杂操作的目的

    HAL库在原理上和库函数是一样的,但是最大的区别就是,库函数都是码农自己随便写的,命名和参数都是自己决定的,而HAL库就是官方做的统一标准的版本,可读性高,移植性高。

    • 发布于2019-11-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 从执行效率高到底排序是寄存器,库函数,hal库函数,

    从兼容性来说是hal库最好,移植方便,现在大部分开发都用hal库函数,只有在需要高执行效率才会用到寄存器版本

    • 发布于2019-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 库函数是指调用st提供的函数去实现底层驱动.即所谓库函数写代码. 

    寄存器是指直接操作底层寄存器去实现驱动即所谓寄存器写代码.

    hal库是库函数其中一个版本,为了推广st的应用而推出的一个配置库版本,其实我觉得直接用hal库也没什么问题,也许有些可能不太容易从原理上弄懂,但直观上还是挺方便的。

    • 发布于2019-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 只是调用的函数我名字不一样,你说的库应该是标准库,与HAL库的结构是不一样的。

    HAL库更通用一些。

    寄存器版本就是直接操作寄存器的地址来配置外设

    其实本质上,都是在配置寄存器。

    • 发布于2019-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 库函数都是基于寄存器封装的,不同的库就是封装的API类型不一样,现在ST基本就推HAL库和LL库,都很多软件包和例程可以参考,寄存器都是需要自己研究的,不带直接例程
    • 发布于2019-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实没有什么关系,只是实现的方式不同,寄存器是支持操作寄存器并赋值

    库,都是把操作寄存器的操作做成函数,直接调用的

    • 发布于2019-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • HAL库函数,库函数,都是属于对寄存器操作的封装,HAL库和标准库只是函数名不同,且增加了一些状态位判断的内容,其它的差不多
    • 发布于2019-11-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

HAL库函数版本和库函数版本、寄存器版本之间是什么关系