STM32 HAL库头文件包含关系

时间:2022-08-16 16:48:31

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类型的函数,如回调函数.)