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

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

3天内不再提示

STM32的HAL与LL库能共同使用(混用)吗?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-02-28 16:57 次阅读

这是一位读者问的问题,我觉得很多人应该都有这种疑惑,所以特地写篇文章分享给大家。

一、标准外设库停更了

很多学习STM32的朋友都比较依赖之前的标准外设库(StdPeriph_Lib),我想告诉大家一个事实,那就是标准外设库已经停更很久了。

支持标准外设库的STM32,只有相对较老的系列:F0、 F1、F2、F3、F4、L1.

我特地看了下,STM32标准外设库最后一次更新时间是2016年11月的F4系列。

标准外设库地址:

https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html

这后面出来的L0、 L4、 L5、 F7、 H7、 G0、 G4等都没有标准外设库了。

所以,使用STM32CubeHAL将成为今后的的主流。这里就出来了一个问题:该使用HAL,还是LL开发呢?

二者能共同共同开发吗?

拓展文章:

关于STM32的四类嵌入式软件

STM32Cube LL能高效的原因


二、HAL和LL库能共同使用吗?

这个问题的答案是:不建议共同使用。

当然,这个问题还要分情况:相同外设和不同外设之间共同使用HAL和LL库。

1.不同外设混用HAL和LL库

这里说的不同外设混用HAL和LL库针对的不同外设。比如:UART使用HAL库,SPI使用LL库。

这种情况下,一般来说:没问题。

因为官方不管是从资料,还是从STM32CubeMX工具配置都没有反对这种做法。

这虽然没有明确说不允许这样操作,但实际项目不建议这种方式。

至于原因,相信不用我说,有项目经验的朋友都明白。这样做不利于代码移植,管理等工作。

2.相同外设混用HAL和LL库

这里才是本文重点,这种情况,官方其实也是建议:不允许。

这样混用,会存在一系列问题:底层冲突、结构混乱、管理不方便等。

LL库驱动独立,HAL包含驱动包

拿STM32F4的UART传输函数来说,LL库的位于stm32f4xx_ll_usart.h:

而HAL定义于stm32f4xx_hal_uart.c:

从这里可以看得出来,LL只需包含头文件即可,HAL要包含bsp包。

假如使用LL库的工程,想使用HAL库,需添加bsp包到工程。

HAL句柄

对于LL而言,使用HAL库,会多一个句柄,比如UART1:

UART_HandleTypeDef huart1;

如果LL库的工程,直接调用HAL接口是不行的,缺少句柄。

中断请求处理

HAL和LL的中断请求IRQ方式其实是不一样的,混用之后很容易出错。

这里简单举例说这些,深入理解底层的朋友应该知道,还有许多地方也是不建议混用。

当然,不是绝对的(不能混用),我想说:万不得已,慎用。

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

    关注

    2270

    文章

    10897

    浏览量

    355841
  • BSP
    BSP
    +关注

    关注

    1

    文章

    87

    浏览量

    26148
  • 外设
    +关注

    关注

    0

    文章

    40

    浏览量

    11694
收藏 人收藏

    评论

    相关推荐

    HAL在Arduino平台上的使用

    HAL在Arduino平台上的使用 Arduino平台是一个开源的电子原型平台,它包括硬件(基于微控制器的电路板)和软件(Arduino IDE)。Arduino平台因其简单易用而受到广泛欢迎
    的头像 发表于 12-02 14:04 254次阅读

    HAL的函数调用示例

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

    HALSTM32开发中的重要性

    HAL(Hardware Abstraction Layer Library,硬件抽象层)在STM32开发中扮演着至关重要的角色。以下是HAL
    的头像 发表于 12-02 13:35 305次阅读

    如何快速入门HAL编程 HAL与裸机编程的比较

    。 选择开发环境和工具 : 下载并安装适用于目标微控制器的IDE(如STM32CubeIDE)。 配置开发环境,包括编译器、调试器等。 学习HAL文档和教程 : 阅读官方HAL
    的头像 发表于 12-02 11:39 286次阅读

    第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解+HAL

    第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解+HAL
    的头像 发表于 08-21 16:31 2520次阅读
    第12章-ADC采集电压和显示 基于<b class='flag-5'>STM32</b>的ADC—电压采集(详细讲解+<b class='flag-5'>HAL</b><b class='flag-5'>库</b>)

    stm32H7 HAL中存在的bug

    stm32H7 hal 库里面的以太网代码,坑了鱼鹰很多次(不知道最新版是否已经修复了这些bug),这里分享一篇网上的文章,因为鱼鹰也遇到过,靠它解决了其中一个编译优化问题,在此感谢作者。不过hal
    的头像 发表于 08-12 17:37 1136次阅读

    stm32h745的特殊引脚如何使用HAL重定义?

    现在手上有块stm32h745ii的板子,想把pc13 pc14 pc15三个特殊引脚重定义为普通io口,找了一下HAL,好像没有f4库里面直接调用的接口,有知道的大神麻烦告知一下
    发表于 05-24 08:31

    STM32HAL如何开启FPU?

    求:STM32HAL如何开启FPU?
    发表于 05-16 07:26

    STM32F0的SPL能在STM32G0上用吗?

    原来用的STM32F0系列,使用的V3.5.0的标准外设。现在改用STM32G0系列,发现官网提供的固件STM32CubeG0,里面是
    发表于 04-08 08:29

    STM32标准程序与HAL程序如何合并的?

    请问大家STM32标准款与HAL程序有没有合并的教程,或是合并的方法?
    发表于 04-03 08:02

    使用LL生成STM32H7代码时存在报错是什么原因导致的?

    使用LL生成STM32H7代码时存在的BUG
    发表于 04-03 07:33

    STM32F1的LL,RTC怎么不能设置日期?

    STM32F1的LL,RTC 怎么不能设置日期,只能设置时间。
    发表于 03-29 07:02

    请问HALLL分别在什么场合使用?

    请问HALLL分别在什么场合使用?LL简单明了,为啥不是主流使用啊?还有为啥L03的例程中有较多的
    发表于 03-25 08:08

    STM32L471RE同样的硬件使用LLHAL编译的工程运行功耗不一样?为什么?

    项目在使用STM32L471RE开发,涉及到低功耗的处理。在测试过程中发现同样的硬件结构(PCB上仅焊接mcu的最小系统),使用LLHAL
    发表于 03-21 06:17

    基于LL实现STM32U5 LPTIM功能

    有人打算使用STM32U5系列片内LPTIM做低功耗模式唤醒。基于STM32 LL组织代码,折腾几天后似乎连中断都进不了,想找找是否有现存LL
    的头像 发表于 01-07 14:12 1548次阅读
    基于<b class='flag-5'>LL</b><b class='flag-5'>库</b>实现<b class='flag-5'>STM32</b>U5 LPTIM功能