1. 程式人生 > >STM32 HAL庫標頭檔案包含關係

STM32 HAL庫標頭檔案包含關係


如圖,從左到右下的順序寫:

  --------------------------------------------------------------------------------------------------------------------------------

The header of the common HAL driver file(stm32f1xx_hal.h) includes the common

configurations for the whole HAL library.It is the only header file that is included in the user

sources and the HAL C sources files to beable to use the HAL resources.

stm32f1xx_hal.h

Thisfile contains all the functions prototypes for the HAL module driver.

這包含了HAL模型的所有驅動

定義了關於除錯所用的巨集函式

#define__HAL_DBGMCU_FREEZE_TIM2()   

   SET_BIT(DBGMCU->CR,DBGMCU_CR_DBG_TIM2_STOP)

HAL的初始化與功能函式

HAL_Delay();

它包含的標頭檔案:#include"stm32f1xx_hal_conf.h"

 --------------------------------------------------------------------------------------------------------------------------------

stm32f1xx_hal_conf.h

包含了使用者可能會用到的外設模型標頭檔案Module Selection

#include"stm32f1xx_hal_rcc.h"

定義了微控制器的晶振頻率Oscillator Values adaptation

#defineHSE_VALUE    ((uint32_t)8000000)

系統的配置System Configuration

#define  VDD_VALUE                    ((uint32_t)3300) /*!<Value of VDD in mv */        

Assert引數檢查函式的定義

  #define assert_param(expr) ((expr) ? (void)0: assert_failed((uint8_t *)__FILE__, __LINE__))

它包含的標頭檔案:各種外設模型標頭檔案,如stm32f1xx_hal_adc.h等一堆。

 --------------------------------------------------------------------------------------------------------------------------------

stm32f1xx_hal_adc.h(舉adc這個外設標頭檔案)

相對應的stm32f1xx_hal_adc_ex.h,是其對應的擴充套件功能的標頭檔案,差不多~

定義了外設初始化結構體,還 有一堆其它的用於配置的結構體

ADC_InitTypeDef

常用的常量Exported constants

#defineHAL_ADC_ERROR_NONE       ((uint32_t)0x00)   /*!< Noerror                                              

巨集函式定義Exported macro

#defin__HAL_ADC_ENABLE(__HANDLE__)                                           \

  (SET_BIT((__HANDLE__)->Instance->CR2,(ADC_CR2_ADON)))

各種輸出函式的宣告

HAL_StatusTypeDef       HAL_ADC_Init(ADC_HandleTypeDef* hadc);

它包含的標頭檔案:

"stm32f1xx_hal_def.h"

 "stm32f1xx_hal_adc_ex.h"

  --------------------------------------------------------------------------------------------------------------------------------

stm32f1xx_hal_def.h

Thisfile contains HAL common defines, enumeration, macros and  structures definitions.

這檔案包含的是HAL庫共用的巨集定義,結構體,牧舉等。

HAL的狀態結構體:

HAL_StatusTypeDef

它包含的標頭檔案:

#include "stm32f1xx.h"

#include "Legacy/stm32_hal_legacy.h"

  --------------------------------------------------------------------------------------------------------------------------------

stm32f103xe.h(舉F103的例子)包含了整個庫所共用的配置,這也是所有外設與使用者函式的標頭檔案所僅需要包含的標頭檔案。

它定義了:

所有外設暫存器ADC_TypeDef(struct),

所有中斷的編號IRQn_Type(enum),

外設的地址,

#define FLASH_BASE            ((uint32_t)0x08000000)

檢查引數用的巨集函式

#define IS_ADC_ALL_INSTANCE(INSTANCE)(((INSTANCE) == ADC1) || \

                                      ((INSTANCE) == ADC2) || \

                                       ((INSTANCE) == ADC3))

外設中斷函式名

#define ADC1_IRQn                 ADC1_2_IRQn


它包含的標頭檔案包括:

#include"core_cm3.h"   M3的核心檔案

#include"system_stm32f1xx.h"  微控制器的系統初始化

#include<stdint.h>         關於int的宣告~

  --------------------------------------------------------------------------------------------------------------------------------

標頭檔案的包含關係完全與圖相同,根據這個關係可以看出來,當使用cube配置或更改外設時,stm32f1xx_hal_conf.h改變,會增減一些外設標頭檔案,這就導致大部分檔案需要重新編譯,時間有點長。。。。。。

以生成的dac.c/.h這檔案舉例,.h已經生成了extern DAC_HandleTypeDef hdac ,給外部檔案提供介面,只要有包含dac.h就可以直接使用hdac。

cube工程生成的設定裡,有個選項是用於是否更刪使用者外設.c/.h,要注意自己寫的程式碼可能會被刪走。。。。以程式的積累來說的角度來說,我更傾向於寫一個類似於mydac.c/.h的檔案,包含dac.h,有點需要。(那裡就可以寫很多被定義為weak型別的函式,如回撥函式.)