1. stm32f4xx.h举例,HAL库是和CubeMX软件来互相配合使用。用CubeMx来配置STM32芯片的时钟、管脚、各个外设的底层配置,再用HAL库去调用这些底层配置文件来实现快速开发的目的。让我们省去了配置大量底层驱动的工作,集中精力专注于应用层实现功能的目的。<br />

    stm32f4xx_hal.h:stm32f4xx_hal.c/h
    主要实现HAL库的初始化、系统滴答相关函数、及CPU的调试模式配置
    stm32f4xx_hal_conf.h :
    该文件是一个用户级别的配置文件,用来实现对HAL库的裁剪,其位于用户文件目录,不要放在库目录中。

    接下来对于HAL库的源码文件进行一下说明,后面加上_外设或者模块名(如:stm32f4xx_hal_adc.c):

    1. 库文件:
    2. stm32f4xx_hal_ppp.c/.h
    3. // 主要的外设或者模块的驱动源文件,包含了该外设的通用API
    4. stm32f4xx_hal_ppp_ex.c/.h
    5. // 外围设备或模块驱动程序的扩展文件。这组文件中包含特定型号或者系列的芯片的特殊API。以及如果该特定的芯片内部有不同的实现方式,则该文件中的特殊API将覆盖_ppp中的通用API。
    6. stm32f4xx_hal.c/.h
    7. // 此文件用于HAL初始化,并且包含DBGMCU、重映射和基于systick的时间延迟等相关的API
    1. 用户级别文件:
    2. stm32f4xx_hal_msp_template.c
    3. // 只有.c没有.h。它包含用户应用程序中使用的外设的MSP初始化和反初始化(主程序和回调函数)。使用者复制到自己目录下使用模板。
    4. stm32f4xx_hal_conf_template.h
    5. // 用户级别的库配置文件模板。使用者复制到自己目录下使用
    6. system_stm32f4xx.c
    7. // 此文件主要包含SystemInit()函数,该函数在刚复位及跳到main之前的启动过程中被调用。 它不在启动时配置系统时钟(与标准库相反)。 时钟的配置在用户文件中使用HAL API来完成。
    8. startup_stm32f4xx.s
    9. // 芯片启动文件,主要包含堆栈定义,终端向量表等
    10. stm32f4xx_it.c/.h
    11. // 中断处理函数的相关实现
    12. main.c/.h

    根据HAL库的命名规则,其API可以分为以下三大类:

    1. 初始化/反初始化函数: HAL_PPP_Init(), HAL_PPP_DeInit()
    2. IO 操作函数: HAL_PPP_Read(), HAL_PPP_Write(),HAL_PPP_Transmit(), HAL_PPP_Receive()
    3. 控制函数: HAL_PPP_Set (), HAL_PPP_Get ().
    4. 状态和错误: ** HAL_PPP_GetState (), HAL_PPP_GetError ().

    在此结构下,用户代码的处理主要分为三部分:

    1. 处理外设句柄(实现用户功能)<br /> 处理MSP<br /> 处理各种回调函数
    1. void HAL_UART_MspInit(UART_HandleTypeDef *huart);