色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32基礎知識:HAL庫的框架結構

CHANBAEK ? 來源:上下求索電子er ? 作者:上下求索電子er ? 2023-10-25 15:28 ? 次閱讀

HAL庫的框架結構

1 初始HAL庫

1.1 CMSIS簡介

基于Cortex系列芯片采用的內核都是相同的,區別主要為核外的片上外設的差異,這些差異卻導致軟件在同內核,不同外設的芯片上移植困難。為了解決不同的芯片廠商生產的Cortex微控制器軟件 的兼容性問題,ARM與芯片廠商建立了CMSIS標準(Cortex MicroController Software Interface Standard)。

Cortex微控制器軟件接口標準(Cortex Microcontroller Software Interface Standard)是ARM和一些編譯器廠家以及半導體廠家共同遵循的一套標準,是由ARM提出,專門針對CORTEX-M系列的標準。在該標準的約定下,ARM和芯片廠商會提供一些通用的API接口來訪問CORTEX內核以及一些專用外設,以減少更換芯片以及開發工具等移植工作所帶來的金錢以及時間上的消耗。

以下是ARM官網關于CMSIS的架構圖

圖片

可見,CMSIS層位于硬件層與操作系統或用戶層之間,提供了與芯片生產商無關的硬件抽象層,可以為接口外設、實時操作系統提供簡單的處理器軟件接口,屏蔽了硬件差異,這對軟件的移植是有極大的好處的。STM32的庫,就是按照CMSIS標準建立的。

1.2 HAL庫簡介

ST 為了方便用戶開發 STM32芯片開發提供了三種庫:

  1. 標準外設庫 :Standard Peripheral Libraries F0/F1/F3/F2/F4/L1目前已停止維護。
  2. HAL庫:Hardware Abstraction Layer 全系列兼容,ST目前主推的庫,具有強兼容性、易移植性,但效率較低。
  3. LL庫:Low Layer 全系列兼容,與HAL庫捆綁發布,輕量級、效率高,但不匹配部分復雜外設。

三種庫比較:圖片

1.3 MCU固件包

STM32微控制器各個產品系列都有獨立的MCU固件包,HAL庫屬于MCU固件包的一部分。

圖片

MCU固件包文件結構:

圖片

  • Drivers:文件夾下是官方的CMSISI庫,HAL庫,板載外設驅動。
    圖片
    • CMSIS:由ARM公司提供的Cortex微控制器軟件接口標準,包括Cortex內核寄存器定義、啟動文件等。
    • STM32F1xx_HAL_Driver:STM32微控制器片內外設的HAL庫驅動文件stm32f1xx_hal_ppp.h,stm32f1xx_hal_ppp.c。
    • BSP:基于HAL庫開發的官方開發板的板級支持包,提供指示燈、按鍵等外圍電路的驅動程序,用于適配ST官方的開發板(可參考)。
  • Middleware:中間件,包含ST官方的STemWin、 STM32_Audio、STM32_USB_Device_Library、STM32_USB_Host_Library;也有第三方的fatfs文件系統等等。
    圖片
    圖片
  • Projects:文件夾下是用驅動庫寫的針對官方發行demo板的例子和工程模板。
    圖片
  • Templates:各集成開發環境的工程模板。
  • Examples:針對MCU片內外設的簡單例程,如GPIO、UART等。
  • Applications:針對單個中間件的應用例程。
  • Demonstations:針對多個中間件的綜合應用例程。
  • Utilities:實用的公用組件比如LCD_LOG實用液晶打印調試信息

1.4 HAL庫框架結構

HAL庫文件夾結構

圖片

Src(Source):外設驅動源碼,Inc(Include):外設驅動源碼頭文件。

HAL庫文件介紹:

  • stm32f1xx_hal.c, stm32f1xx_hal.h
    HAL庫初始化、系統滴答、HAL庫延時等相關函數
  • stm32f1xx_hal_conf.h
    HAL庫的用戶配置文件,用于裁剪HAL庫、配置晶振參數
  • stm32f1xx_hal_def.h
    包含HAL庫通用的枚舉類型數據和宏定義
  • stm32f1xx_hal_cortex.h, stm32f1xx_hal_cortex.c
    內核通用函數定義和聲明,如NVIC、MPU、系統軟復位、Systick等,其實主要是對core_cm3.h 文件的相關函數再次封裝。
  • stm32f1xx_hal_ppp.c, stm32f1xx_hal_ppp.h
    某任意外設驅動源碼,PPP表示任意外設
  • stm32f1xx_hal_ppp_ex.c, stm32f1xx_hal_ppp_ex.h
    主要是存放外設的擴展(特殊)功能的驅動源碼,PPP表示任意外設
  • stm32f1xx_II_ppp.c, stm32f1xx_II_ppp.h
    LL庫驅動源碼,在部分STM32F1xx_hal_ppp.c 或stm32f1xx_hal_ppp_ex.c中會被調用

HAL庫API函數和變量命名規則:

  • stm32f1xx_hal_ppp .(c/h)
    • 函數名:HAL_PPP_Function
    • 外設句柄:PPP_HandleTypeDef
    • 外設工作參數初始化結構體:PPP_InitTypeDef
    • 配置參數結構體:PPP_ YyyyConfTypeDef
  • stm32f1xx_hal_ppp_ex .(c/h)
    • 函數名:HAL_PPPEx_Function
    • 外設句柄:無
    • 外設工作參數初始化結構體:PPP_InitTypeDef
    • 配置參數結構體:PPP_ YyyyConfTypeDef
  • 初始化/反初始化函數:
  • HAL_PPP_Init(),HAL_PPP_DeInit()
  • 外設讀寫函數:
  • HAL_PPP_Read(),
  • HAL_PPP_Write(),
  • HAL_PPP_Transmit(),
  • HAL_PPP_Receive()
  • 控制函數:
  • HAL_PPP_Set (),
  • HAL_PPP_Get ()
  • 狀態和錯誤:
  • HAL_PPP_GetState (),HAL_PPP_GetError ()

HAL庫對寄存器位操作的相關宏定義:

  • __HAL_PPP_ENABLE_IT( HANDLE , INTERRUPT )
    使能外設中斷
  • __HAL_PPP_DISABLE_IT( HANDLE , INTERRUPT )
    禁用外設中斷
  • __HAL_PPP_GET_IT ( HANDLE , __ INTERRUPT __)
    獲取外設某一中斷源
  • __HAL_PPP_CLEAR_IT ( HANDLE , __ INTERRUPT __)
    清除外設中斷
  • __HAL_PPP_GET_FLAG ( HANDLE , FLAG )
    獲取外設的狀態標記
  • __HAL_PPP_CLEAR_FLAG ( HANDLE , FLAG )
    清除外設的狀態標記
  • __HAL_PPP_ENABLE( HANDLE )
    使能某一外設
  • __HAL_PPP_DISABLE( HANDLE )
    禁用某一外設
  • __HAL_PPP_XXXX ( HANDLE , PARAM )
    針對外設的特殊操作
  • _HAL_PPP_GET IT_SOURCE ( HANDLE , __INTERRUPT __)
    檢查外設的中斷源

HAL庫回調函數:

  • HAL_PPP_MspInit() / _MspDeInit()
    舉例: HAL_USART_MspInit() 會被HAL_PPP_Init() 函數調用,該函數主要用于存放外設使用到的GPIO、CLOCK、NVIC、DMA等初始化代碼。
  • HAL_PPP_ProcessCpltCallback
    舉例: HAL_USART_TxCpltCallback由外設中斷或DMA中斷調用,HAL庫中斷公共處理函數已經實現對中斷標記位讀取、判斷和清除操作,用戶只需要專注于中斷邏輯功能的實現即可。
  • HAL_PPP_ErrorCallback
    舉例: HAL_USART_ErrorCallback外設或DMA中斷中發生的錯誤,用于發生錯誤處理。

此類函數通常被_weak修飾(弱函數),允許用戶重新定義該函數。

1.5 HAL庫的設計思想

HAL庫借鑒 面向對象的設計思想

圖片

開發方式的特點:

  • 屏蔽底層硬件編程者只需要了解庫函數中相關接口函數的功能,并按照要求傳入參數,利用返回值完成操作即可,不需要過多了解底層硬件。
  • 提高開發效率 :開發難度較小,開發周期較短,后期的維護升級、以及硬件平臺的移植等工作量較小。
  • 程序執行效率 :由于考慮了程序的穩健性、擴充性和可移植性,程序代碼比較繁瑣和臃腫,執行效率較低。

用戶代碼的處理主要分為三部分:

  • 處理外設句柄(實現用戶功能)
  • 處理MSP
  • 處理各種回調函數

設計思想:從抽象到重載

圖片

1.6 以USART為例說明HAL庫的抽象結構

①外設句柄的定義:

HAL庫在結構上,對每個外設抽象成了一個稱為ppp_HandleTypeDef的結構體,其中ppp就是每個外設的名字。所有的函數都是工作在ppp_HandleTypeDef指針之下。

例如,使用USART2時,可以定義USART初始化結構體變量(全局變量)huart2huart2就被稱為串口的句柄,它被貫穿整個USART收發的流程。

UART_HandleTypeDef huart2;

②外設句柄數據類型的組成:

圖片

圖片

③串口初始化數據類型的組成:

圖片

④串口初始化過程:

圖片

  • 抽象—串口初始化函數MX_USART2_UART_Init 將與MCU無關的通信參數存入句柄結構 +使用HAL_UART_Init執行串口初始化操作,將句柄參數寫入寄存器。
    HAL_UART_Init` 干了哪些事?

  • 調用 HAL_UART_MspInit* 修改狀態忙* 配置寄存器* 清除標志位

    圖片

  • 承載—與MCU相關的初始化函數HAL_UART_MspInit 時鐘初始化 + 引腳初始化
    圖片

⑤串口中斷處理過程:

圖片

  • HAL_UART_Receive_IT:開啟中斷,在中斷方式下接收一定數量的數據。
  • USART2_IRQHandler:串口2的中斷服務程序,調用串口中斷通用處理函數HAL_UART_IRQHandler
  • HAL_UART_IRQHandler:在函數 HAL_UART_IRQHandler內部通過判斷中斷類型是否為接收完成中斷,確定是否調用UART_Receive_IT
    函數UART_Receive_IT的作用是把每次中斷接收到的字符保存在串口句柄的緩存指針pRxBuffPtr中,同時每次接收一個字符,其計數器 RxXferCount 減 1,直到接收完成 RxXferSize 個字符之后 RxXferCount設置為0,同時調用接收完成回調函數 HAL_UART_RxCpltCallback進行處理。
  • HAL_UART_RxCpltCallback:函數由串口中斷通用處理函數UART_Receive_IT調用,完成所有串口的接收中斷任務處理,函數內部需要根據串口句柄的實例來判斷是哪一個串口產生的接收中斷,函數由用戶根據具體的處理任務編寫。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7646

    瀏覽量

    151891
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17316

    瀏覽量

    352265
  • STM32
    +關注

    關注

    2271

    文章

    10923

    瀏覽量

    357108
  • Cortex
    +關注

    關注

    2

    文章

    203

    瀏覽量

    46558
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6361
收藏 人收藏

    評論

    相關推薦

    hadoop框架結構的說明介紹

    的基礎代碼、算法封裝為類,降低了大俗局的學習門檻,降低開發難度。DKhadoop框架結構構成模塊:我們以DKhadoop發行版為例:1、框架由:數據源與SQL引擎、數據采集(自定義爬蟲)模塊、數據處理模塊
    發表于 10-15 15:59

    STM32基礎知識

    基礎知識:1.STM32這個是針對STM32開發板提供的函數接口,可以用來配置寄存器。采用
    發表于 08-05 07:21

    STM32H7的DAC基礎知識HALAPI

    第59章 STM32H7的DAC基礎知識HALAPI本章節為大家講解DAC,實際項目用到DAC的地方比較多,而且H7的DAC性能也比較給力。59.1 初學者重要提示59.2 DAC
    發表于 08-06 08:25

    講解內部Flash的基礎知識和對應的HALAPI

    第70章 STM32H7的內部Flash基礎知識HALAPI本章節為大家講解內部Flash的基礎知識和對應的
    發表于 08-12 06:31

    STM32H7的TIM定時器基礎知識HAL

    第32章 STM32H7的TIM定時器基礎知識HALAPI本章節為大家講解TIM1 – TIM17(STM32H7沒有TIM9,TIM1
    發表于 08-19 06:53

    STM32F407開發板用戶手冊】第23章 STM32F407的USART串口基礎知識HALAPI 精選資料分享

    最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255第23章 STM32F407的USART串口基礎知識HAL
    發表于 08-20 06:38

    USART的基礎知識和對應的HALAPI

    第23章 STM32F429的USART串口基礎知識HALAPI本章節為大家講解USART(Universal synchronous asynchronous receiver
    發表于 08-20 08:18

    STM32H7的ADC基礎知識HALAPI

    第44章 STM32H7的ADC基礎知識HALAPI本章節為大家講解ADC(Analog-to-digital converters,模數轉換器),極具項目使用價值,因為
    發表于 08-20 07:55

    入門有必要選擇STM32Cube HAL開發嗎?

    所以,我的建議是:如果你數據結構功底不好,可以先從寄存器、標準外設開始,當你基礎知識累計一定程度,可以轉向STM32Cube HAL開發。
    的頭像 發表于 03-14 13:53 ?1.6w次閱讀
    入門有必要選擇<b class='flag-5'>STM32</b>Cube <b class='flag-5'>HAL</b><b class='flag-5'>庫</b>開發嗎?

    HAL結構

    HAL結構
    發表于 12-09 13:36 ?32次下載
    <b class='flag-5'>HAL</b><b class='flag-5'>庫</b><b class='flag-5'>結構</b>

    STM32H7教程】第57章 STM32H7硬件JPEG編解碼基礎知識HALAPI

    完整教程下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980第57章 STM32H7硬件JPEG編解碼基礎知識HAL
    發表于 12-27 18:45 ?14次下載
    【<b class='flag-5'>STM32</b>H7教程】第57章 <b class='flag-5'>STM32</b>H7硬件JPEG編解碼<b class='flag-5'>基礎知識</b>和<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>API

    常規自動化程序框架結構

    常規自動化程序框架結構,方便程序編寫提高工程效率。
    發表于 02-22 14:30 ?37次下載

    stm32 hal資料分享

    stm32 hal資料分享
    發表于 11-03 16:17 ?120次下載

    STM32 HAL的功能和使用方法 STM32 HAL和標準的區別

    和可維護性,從而節省開發成本和時間。STM32 HALSTM32系列芯片的HAL,由ST公
    發表于 08-08 18:21 ?4732次閱讀

    如何快速入門HAL編程 HAL與裸機編程的比較

    如何快速入門HAL編程 要快速入門HAL編程,可以遵循以下步驟: 了解基礎知識 : 掌握C語言編程基礎,包括變量、數據類型、函數、指針等
    的頭像 發表于 12-02 11:39 ?406次閱讀
    主站蜘蛛池模板: 美女的隐私蜜桃传媒免费看 | xxx日本黄色 | 小寡妇水真多好紧 | 日本乱hd高清videos | 日韩高清特级特黄毛片 | 九九热精品免费观看 | 成人在线观看免费视频 | 国产高清超清在线播放 | 国内精品久久久久影院男同志 | 入禽太深免费视频10 | 性色欲情网站IWWW九文堂 | 胖老太与人牲交BBWBBW高潮 | 蜜臀AV中文字幕熟女人妻 | 久久兔费黄A级毛片高清 | 久久伊人在 | 交换:年轻夫妇-HD中文字幕 | 东北嫖妓对白粗口 | 国产乱人视频在线观看 | 欧美丝袜女同 | 任你躁国语自产二区在线播放 | 强奸美女老师 | 在线观看成人免费 | 精品国产品在线18年 | 把极品白丝班长啪到腿软 | 东北女人奶大毛多水多 | 蜜芽一区二区国产精品 | 亚洲第一综合天堂另类专 | 99热在线播放 | 被老师按在办公桌吸奶头 | 国产久久re6免费热在线 | 视频一区亚洲视频无码 | 久久免费精品一区二区 | 视频一区国产在线二区 | 20岁αsrian男同志免费 | 日韩精品AV一区二区三区 | 亚洲AV精品无码喷水直播间 | 樱桃视频高清免费观看在线播放 | 99精品免费观看 | 久久久久99精品成人片三人毛片 | 国产在线综合色视频 | 精品蜜臀AV在线天堂 |