精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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
    +關注

    關注

    2266

    文章

    10873

    瀏覽量

    354843
  • BSP
    BSP
    +關注

    關注

    1

    文章

    86

    瀏覽量

    26111
  • 外設
    +關注

    關注

    0

    文章

    35

    瀏覽量

    11681
收藏 人收藏

    評論

    相關推薦

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL
    的頭像 發表于 08-21 16:31 ?2189次閱讀
    第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 ?867次閱讀

    stm32h745的特殊引腳如何使用HAL重定義?

    現在手上有塊stm32h745ii的板子,想把pc13 pc14 pc15三個特殊引腳重定義為普通io口,找了一下HAL,好像沒有f4庫里面直接調用的接口,有知道的大神麻煩告知一下
    發表于 05-24 08:31

    STM32HAL如何開啟FPU?

    求:STM32HAL如何開啟FPU?
    發表于 05-16 07:26

    HALIAP失敗的原因?

    第一個項目HALSTM32Cube FW_F1 V1.2.0,生成A_boot.bin,A_app.bin,從A_boot跳轉A_app成功 第二個項目HAL
    發表于 05-10 08:29

    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

    STM32L0 LLIIC發送不出我想要的數據是怎么回事?

    FW版本是1.12; 使用IC是STM32L0F4U; CUBEMX配置,使用LL。 前提:因為從機的IIC是非標準協議,第一個字節不是控制R/W, 不能用HAL
    發表于 04-03 07:30

    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 ?1467次閱讀
    基于<b class='flag-5'>LL</b><b class='flag-5'>庫</b>實現<b class='flag-5'>STM32</b>U5 LPTIM功能

    stm32f1如何將外部中斷關掉hal

    STM32F1系列微控制器是STMicroelectronics制造的32位ARM Cortex-M3內核的嵌入式微控制器系列。該系列采用了HAL(Hardware Abstraction
    的頭像 發表于 12-22 13:52 ?3218次閱讀

    使用STM32 HAL進行GPIO控制的實例

    在基于STM32微控制器的嵌入式系統開發中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常見的操作之一。通過使用STM32HAL,可以輕松地
    的頭像 發表于 12-21 15:22 ?3174次閱讀