STM32 HAL库 .c/.h 文件介绍
HAL庫中各個文件的介紹:
?
startup_stm32l475xx.s
啟動文件的主要作用是進行RAM中堆、棧內存的分配和初始化,中斷向量表及中斷函數的定義等,進行完這一系列工作后執行系統復位從而跳轉至用戶main函數開始執行。
stm32l4xx_hal_ppp.c/.h
基本外設的操作函數文件,ppp 代表外設名稱。其中stm32l4xx_hal_cortex.c/.h 比較特殊,它是一些 Cortex 內核通用函數聲明和定義,例如中斷優先級 NVIC 配置,系統軟復位以及Systick 配置等。
stm32l4xx_hal_ppp_ex.c/.h
擴展外設特性的操作函數文件。
stm32l4xx_hal.c
HAL庫的通用函數文件,如HAL_Init,HAL_DeInit,HAL_Delay等。
stm32l4xx_hal.h
HAL庫的通用函數文件的頭文件。
stm32l4xx_hal_conf.h
HAL庫的配置文件,使用宏定義選擇某種外設是否使能,以及一些時鐘參數的配置。
stm32l4xx_hal_def.h
HAL庫中的通用數據類型定義和宏定義。
stm32l4xx_it.c/stm32l4xx_it.h
中斷服務函數的定義和聲明,放置的基本都是一些空函數,除SysTick_Handler函數外。
stm32l4xx.h
stm32l4xx.h文件會根據 C/C++選項卡里面定義的全局宏定義標識符選擇程序中包含的頭文件。
stm32l475xx.h
主要是該型號芯片寄存器定義聲明以及封裝的內存操作。
system_stm32l4xx.c/system_stm32l4xx.h
源文件中包含SystemInit函數和SystemCoreClockUpdate函數的定義,SystemInit 函數的作用是進行時鐘系統的一些初始化操作以及中斷向量表偏移地址設置,但它并沒有設置具體的時鐘值。SystemCoreClockUpdate 函數是在系統時鐘配置進行修改后,調用這個函數來 更新全局變量 SystemCoreClock 的值,開放這個變量可以方便用戶使用系統時鐘進行一些計算時使用。
stm32l4xx_hal_msp.c
MSP,全稱為MCU support package,即芯片支持包,表明該文件和芯片型號是強相關的。函數名字中帶有 MspInit 的函數,它們的作用是進行MCU級別硬件初始化設置,并且它們通常會被上一層的初始化函數所調用,這樣做的目的是為了把 MCU 相關的硬件初始化剝奪出來,方便用戶代碼在不同型號的 MCU 上移植。 stm32l4xx_hal_msp.c 文件定義了兩個函數 HAL_MspInit 和 HAL_MspDeInit。這兩個函數分別被文件 stm32l4xx_hal.c中的HAL_Init和 HAL_DeInit所調用。HAL_MspInit函數的主要作用是進行 MCU 相關的硬件初始化操作。例如我們要初始化某些硬件,我們可以硬件相關的初始化配置寫在 HAL_MspDeinit 函數中。這樣的話,在系統啟動后調用了 HAL_Init 之后,會自動調用硬件初始化函數。
?
如main函數中調用MX_USART3_UART_Init()函數,
MX_USART3_UART_Init()函數調用HAL_UART_Init()函數進行串口初始化,
HAL_UART_Init()函數內部會判斷若串口未初始化則調用HAL_UART_MspInit()函數進行初始化。
串口的初始化過程為MX_USART3_UART_Init()---->HAL_UART_Init()---->HAL_UART_MspInit()。為什么串口相關初始化不在 HAL_UART_Init 函數內部一次初始化而還要調用函數 HAL_UART_MspInit()呢?這實際就是 HAL 庫的一個優點,它通過開放一個回調函數 HAL_UART_MspInit(),讓用戶自己去編寫與串口相關的 MCU 級別的硬件初始化,而與 MCU 無關的串口參數相關的通用配置則放在 HAL_UART_Init。 我們要初始化一個串口,首先要設置和 MCU 無關的東西,例如波特率,奇偶校驗,停止位等, 這些參數設置和 MCU 沒 有 任 何 關 系 , 可 以 使 用 STM32F1 , 也 可 以 是 STM32F2/F3/F4/F7/H7 上的串口。而一個串口設備它需要一個 MCU 來承載,例如用 STM32L4 來做承載,PA9 做為發送,PA10 做為接收,MSP 就是要初始化 STM32L4 的 PA9,PA10,配置 這 兩 個 引 腳 。 所以 HAL 驅 動 方 式 的 初 始 化 流 程 就 是 : HAL_USART_Init()—>HAL_USART_MspInit() ,先初始化與 MCU 無關的串口協議,再初始化 與 MCU 相關的串口引腳。在 STM32 的 HAL 驅動中 HAL_PPP_MspInit()作為回調,被HAL_PPP_Init()函數所調用。當我們需要移植程序到 STM32F1 平臺的時候,我們只需要修改 HAL_PPP_MspInit 函數內容而不需要修改 HAL_PPP_Init 入口參數內容。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的STM32 HAL库 .c/.h 文件介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: koa --- [MVC实现之二]Co
- 下一篇: 常用语料库