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

发布者:SparklingBeauty最新更新时间:2024-08-01 来源: elecfans关键字:STM32  HAL  LL库 手机看文章 扫描二维码
随时随地手机看文章

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


一、标准外设库停更了

很多学习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  HAL  LL库 引用地址:STM32的HAL与LL库能共同使用(混用)吗?

上一篇:STM32中的SysTick时钟源来自哪里?
下一篇:STM32WB55开发(1)----监测STM32WB连接状态

推荐阅读最新更新时间:2024-11-10 10:25

STM32内部时钟输出PA.8(MCO)
STM32 的PA.8引脚具有复用功能——时钟输出(MCO), 该功能能将 STM32 内部的时钟通过PA.8输出. 操作流程: 1)、设置PA.8为复用Push-Pull模式。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); 2)、选择输出时钟源。 时钟的选择由时钟配置寄存器(RCC_CFGR)中的MCO 位控
[单片机]
STM32定时计算详解
STM32之定时器 时间=次数x1/频率 ((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒 一、定时器简介 1、时钟来源 2、定时器结构(以基本定时器为例) 二、基本定时器的编程方法 1、基本定时器的寄存器 2、例程 /** * @brief 定时器6的初始化,定时周期0.01s * @param 无 * @retval 无 */ void TIM6_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /*AHB = 72MHz,R
[单片机]
<font color='red'>STM32</font>定时计算详解
STM32-NVIC中断嵌套优先级管理器
NVIC简介 NVIC(Nested Vectored Interrupt Controller),中断嵌套向量控制器,是 Cortex‐M3 不可分离的一部分,它与 CM3 内核共同完成对中断的响应。在了解NVIC之前最好简单了解一下CM3内核的中断系统,传送。 NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQn),每个中断有最高256(最低8)级的优先级,具体的中断数和优先级级数由芯片厂商在设计芯片时决定(STM32F1支持60个外部中断,16级优先级)。此外,NVIC 还支持一个“永垂不朽”的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片制造商决定。在某些情况下,NMI 无法由外部中断源
[单片机]
STM32-NVIC中断嵌套优先级管理器
STM32开发笔记3: STM32F407定时器2-5的使用方法
单片机型号:STM32F407 STM32F4有多种定时器,其中TIM2-TIM5称为通用定时器,具有相似的软件设置及使用方法。在这里还需要注意的是TIM3和TIM4为16位定时器,TIM2和TIM5为32位定时器。 使用TIM2-5可以遵循以下步骤: 1、打开config.h文件,对如下图所示的宏进行设置,设置为0表示不启动相应的定时器,设置为1表示当前定时器定时1ms,设置为2表示当前定时器定时10ms,设置为3表示当前定时器定时100ms,设置为4表示当前定时器为1s。 上图所示的设置结果为,启动定时器2设置为1ms定时,启动定时器5设置为1s定时,定时器3和定时器4没有启动。
[单片机]
<font color='red'>STM32</font>开发笔记3: STM32F407定时器2-5的使用方法
MDK-ARM(Keil uVision V4.72)上STM32开发环境配置
以前我都是在Eclipse上面和arm-none-eabi交叉编译环境来开发STM32应用程序的。 现在改用MDK-ARM比较专业的工具搭建一个开发环境。 新建一个指定STM32微控制器型号的工程: 为了生成编译文件,勾选如下复选框: 配置编译项: STM32F4XX, USE_STDPERIPH_DRIVER 添加库编译符号,和语言/代码生成级别 其中最关键的头文件包含目录: 首先要添加包含工程目录,因为固件库会查找 stm32f4xx_conf.h 配置头文件,中断服务例程实现文件可能也会调用main.h中的函数。 再添加包含 xxxySTM32F4_LibLibrariesCMSISIn
[单片机]
MDK-ARM(Keil uVision V4.72)上<font color='red'>STM32</font>开发环境配置
stm32低功耗休眠模式下使用看门狗wdt
最近一个项目在用stm32f103,发现stm32一旦开启看门狗,就关不了,进入低功耗模式后,看门狗也重启,不使用看门狗非常危险,网上看了好多资料也查不到解决方案,后来自己想到一个可以进入低功耗又可以使用看门狗的方案,在这里给大家分享,我自己实验过可以正常使用。 我的产品是关机后进入低功耗模式,mcu一直带电。 关机流程:关机命令----往flash创建flag标志—重启(调用函数NVIC_SystemReset()) 开机流程:1. 读flash是否有flash标志----是----删除flag标志-----进入低功耗模式。 2. 读flash是否有flash标志----否—直接进入程序。
[单片机]
STM32 串口例程之查询收发
有了STM32,使用串口简直就是玩游戏的感觉。这里鄙人就不谈STM32串口的happy了,直接上代码,读者从代码中体会乐趣。发送接受均采用查询方式,串口调试工具使用超级终端或者这货--SecureCRT 5.5(传说比超级终端还超级),在中端里面输入什么,同步接受与发送,感觉就像是在文本框里面打字。 还是甩一张工程结构图正面: 代码鄙人偷懒,所有代码在main.c里面一锅煮:
[单片机]
STM32数据类型的定义
/* exact-width signed integer types */ typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __int64 int64_t; /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned in
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved