女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內(nèi)不再提示

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

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

HAL庫的框架結構

1 初始HAL庫

1.1 CMSIS簡介

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

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

以下是ARM官網(wǎng)關于CMSIS的架構圖

圖片

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

1.2 HAL庫簡介

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

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

三種庫比較:圖片

1.3 MCU固件包

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

圖片

MCU固件包文件結構:

圖片

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

1.4 HAL庫框架結構

HAL庫文件夾結構

圖片

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

HAL庫文件介紹:

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

HAL庫API函數(shù)和變量命名規(guī)則:

  • stm32f1xx_hal_ppp .(c/h)
    • 函數(shù)名:HAL_PPP_Function
    • 外設句柄:PPP_HandleTypeDef
    • 外設工作參數(shù)初始化結構體:PPP_InitTypeDef
    • 配置參數(shù)結構體:PPP_ YyyyConfTypeDef
  • stm32f1xx_hal_ppp_ex .(c/h)
    • 函數(shù)名:HAL_PPPEx_Function
    • 外設句柄:無
    • 外設工作參數(shù)初始化結構體:PPP_InitTypeDef
    • 配置參數(shù)結構體:PPP_ YyyyConfTypeDef
  • 初始化/反初始化函數(shù):
  • HAL_PPP_Init(),HAL_PPP_DeInit()
  • 外設讀寫函數(shù):
  • HAL_PPP_Read(),
  • HAL_PPP_Write(),
  • HAL_PPP_Transmit(),
  • HAL_PPP_Receive()
  • 控制函數(shù):
  • HAL_PPP_Set (),
  • HAL_PPP_Get ()
  • 狀態(tài)和錯誤:
  • 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 )
    獲取外設的狀態(tài)標記
  • __HAL_PPP_CLEAR_FLAG ( HANDLE , FLAG )
    清除外設的狀態(tài)標記
  • __HAL_PPP_ENABLE( HANDLE )
    使能某一外設
  • __HAL_PPP_DISABLE( HANDLE )
    禁用某一外設
  • __HAL_PPP_XXXX ( HANDLE , PARAM )
    針對外設的特殊操作
  • _HAL_PPP_GET IT_SOURCE ( HANDLE , __INTERRUPT __)
    檢查外設的中斷源

HAL庫回調(diào)函數(shù):

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

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

1.5 HAL庫的設計思想

HAL庫借鑒 面向?qū)ο蟮脑O計思想

圖片

開發(fā)方式的特點:

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

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

  • 處理外設句柄(實現(xiàn)用戶功能)
  • 處理MSP
  • 處理各種回調(diào)函數(shù)

設計思想:從抽象到重載

圖片

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

①外設句柄的定義:

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

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

UART_HandleTypeDef huart2;

②外設句柄數(shù)據(jù)類型的組成:

圖片

圖片

③串口初始化數(shù)據(jù)類型的組成:

圖片

④串口初始化過程:

圖片

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

  • 調(diào)用 HAL_UART_MspInit* 修改狀態(tài)忙* 配置寄存器* 清除標志位

    圖片

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

⑤串口中斷處理過程:

圖片

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

    關注

    48

    文章

    7908

    瀏覽量

    153721
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17847

    瀏覽量

    360622
  • STM32
    +關注

    關注

    2290

    文章

    11017

    瀏覽量

    362458
  • Cortex
    +關注

    關注

    2

    文章

    203

    瀏覽量

    47152
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6760
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    hadoop框架結構的說明介紹

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

    STM32基礎知識

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

    STM32H7的DAC基礎知識HALAPI

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

    講解內(nèi)部Flash的基礎知識和對應的HALAPI

    第70章 STM32H7的內(nèi)部Flash基礎知識HALAPI本章節(jié)為大家講解內(nèi)部Flash的基礎知識和對應的
    發(fā)表于 08-12 06:31

    STM32H7的TIM定時器基礎知識HAL

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

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

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

    USART的基礎知識和對應的HALAPI

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

    STM32H7的ADC基礎知識HALAPI

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

    入門有必要選擇STM32Cube HAL開發(fā)嗎?

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

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

    完整教程下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980第57章 STM32H7硬件JPEG編解碼基礎知識HAL
    發(fā)表于 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

    常規(guī)自動化程序框架結構

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

    stm32 hal資料分享

    stm32 hal資料分享
    發(fā)表于 11-03 16:17 ?132次下載

    STM32 HAL的功能和使用方法 STM32 HAL和標準的區(qū)別

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

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

    如何快速入門HAL編程 要快速入門HAL編程,可以遵循以下步驟: 了解基礎知識 : 掌握C語言編程基礎,包括變量、數(shù)據(jù)類型、函數(shù)、指針等
    的頭像 發(fā)表于 12-02 11:39 ?986次閱讀

    汽車框架結構焊接技術探析

    汽車框架結構作為車輛安全性和整體性能的關鍵組成部分,其制造工藝中的焊接技術尤為重要。焊接不僅影響著汽車的結構強度和耐用性,還直接關系到生產(chǎn)效率和成本控制。隨著汽車行業(yè)對輕量化、高強度材料的需求
    的頭像 發(fā)表于 02-27 09:42 ?263次閱讀