2.HAL库基础和工程目录

CMSIS标准

Cortex系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异。为了解决不同的芯片厂商生产的Cortex微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准(CortexMicroController Software Interface Standard)。CMSIS核心层包括:

  1. 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由 ARM 公司提供。
  2. 设备外设访问层:提供了片上的核外外设的地址和中断定义,主要由芯片生产商提供。

CMSIS 层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,STM32的库就是按照 CMSIS 标准建立的。
2.HAL库基础和工程目录

HAL库目录

2.HAL库基础和工程目录
Drivers: 官方CMSIS库,HAL库,BSP(一般用不到)。
Middlewares: 中间件,包含官方的STemWin,STM32_Audio,STM32_USB_Device_Library,STM32_USB_Host_Library;第三方的 Fatfs,FreeRTOS,LibJPEG,LwIP等。
Drivers\CMSIS: 启动文件,stm32f429xx.h,内核相关头文件(core、arm、cmsis开头),DSP库,RTOS头文件cmsis_os.h。

工程目录

CORE文件夹 用途
cmsis_armcc.h 内核文件
core_cm4.h 内核文件
core_cmFunc.h 内核文件
core_cmInstr.h 内核文件
core_cmSimd.h 内核文件
startup_stm32f429xx.s 启动文件
HALLIB文件夹 用途
stm32f4xx_hal_cortex.c/.h Cortex内核通用函数声明和定义,如NVIC配置,系统软复位以及Systick 配置等
sm32f4xx_hal.c HAL通用API(比如HAL_Init,HAL_DeInit,HAL_Delay 等)
stm32f4xx_hal.h HAL的头文件,用户编写
stm32f4xx_hal_def.h 包含HAL的通用数据类型定义和宏定义
stm32f4xx_hal_ppp.c/.h 外设
stm32f4xx_II_ppp.c/.h 在一些复杂外设中实现底层功能,在stm32f4xx_hal_ppp.c中被调用
USER文件夹 用途
stm32f4xx_hal_conf.h HAL配置文件,用来选择使能何种外设以及一些时钟相关参数设置。其本身应该被用户代码所包含。
stm32f4xx_hal_msp.c 包含HAL_MspInit和HAL_MspDeInit函数,连接HAL库与硬件
stm32f4xx_it.c/.h 中断服务函数,除SysTick_Handler外基本都是空函数
stm32f4xx.h 如果定义了宏定义标识符STM32F429xx,那么stm32f4xx.h将会包含stm32f429xx.h
stm32f429xx.h 片上外设访问层头文件,主要作用是寄存器定义声明以及封装内存操作
system_stm32f4xx.c/h 系统初始化函数SystemInit,系统时钟更新函数SystemCoreClockUpdate
SYSTEM文件夹 用途
sys.c 时钟系统配置,以及一些汇编指令
delay.c 无OS和有OS的延时函数