zoukankan      html  css  js  c++  java
  • STM32固件库

    HAL库、标准外设库(STD)、LL库

    ​ 从学习51单片机转而进一步学习STM32的可能大都习惯了寄存器开发方式,STM32同样可以用操作寄存器的方式开发,但是STM32的数百个寄存器记起来十分困难,因此我们更多的使用固件库的形式开发。固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供一整套接口(API)供开发者调用。

    hal

    ​ ST(意法半导体)为了方便用户开发程序,提供了丰富的官方固件库 。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供。STD库和HAL库两者相互独立,互不兼容。

    ​ 目前几种库对不同芯片的支持情况:

    20200204165254369

    CMSIS标准

    ARM是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而TI、ST这样的芯片公司,根据ARM公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex-M 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO以及其他模块的区别。同一家公司设计的多种 Cortex-M 内核芯片的片上外设也会有很大的区别。

    ​ 既然大家都使用的是 Cortex -M 内核,本质上大家都是一样的,这样ARM公司为了能让不同的芯片公司生产的 Cortex-M 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS标准( Cortex Microcontroller Software Interface Standard),翻译过来是“ARM Cortex™ 微控制器软件接口标准“。ST官方库就是根据这套标准设计的。

    image-20200423161648214

    CMSIS分为3个基本功能层:

    • 核内外设访问层:ARM公司提供的访问,定义处理器内部寄存器地址以及功能函数。
    • 中间件访问层:定义访问中间件的通用API。由ARM提供,芯片厂商根据需要更新。
    • 外设访问层:定义硬件寄存器的地址以及外设的访问函数。

    标准外设库(Standard Peripheral Libraries)

    标准外设库(STD库)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。

    ​ 相对于HAL库,标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。

    注意不支持从STM32 L0,L4和F7开始的之后的STM32系列芯片

    ​ STM32F4 标准外设库文件关系图:

    image-20200423170510349

    HAL 库

    HAL(Hardware Abstraction Layer)库:中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。

    ​ 相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,ST新出的芯片已经没有STD库了。目前,HAL库已经支持STM32全线产品。

    LL库

    LL库(Low Layer):LL库是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。LL 库文件的命名方式和 HAL 库基本相同。

    如果想要更加详细的上述几个库,推荐下某位大佬的博客,讲的十分明了。STM32 之一 HAL库、标准外设库、LL库(STM32 Embedded Software)

    对比

    image-20200423145558657

    ​ 总体来看,代码效率与移植性成反比的规律是明显的。但与Cube HAL相比, Cube LL的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前STM32cubeMX已经开始支持直接生成使用Cube LL的工程,对于追求效率的开发应用人员来说,非常值得推荐给大家使用。

  • 相关阅读:
    IIS服务器SSL证书安装 (pfx文件不能直接运行时)
    .NET Core创建Worker Services
    1.初步了解IOC容器
    1.Configuration
    2.第一个Codefirst实例
    安装Mysql
    2.我的第一个小程序(获取用户信息--包括敏感信息)
    1.什么是微信小程序
    Repeater的使用
    1.MVC的初步了解
  • 原文地址:https://www.cnblogs.com/yangyu-IoT/p/12762263.html
Copyright © 2011-2022 走看看