STM32HAL库入门

说明:下面xx表示实际字符就是xx表示形式,n表示数值,ppp表示可能实际有可能出现的符号

1.一类stm32fn有自己一个专门的cube库,比如f1系列有自己的f1系列cube库,f4系列有自己的f4cube库,这里n为f系列,如1,3,4,7等等。

2.HAL库下各类文件名的作用:

stm32fnxx_hal_ppp.c/.h:表示基本外设的操作api,ppp代表任意外设。由于HAL库每类针对一系列fn,那么具体型号比如f407有些功能是f429上才有的,该型号不具有,所有有些文件针对当前型号可能需要实际进行选择。

stm32fnxx_hal_ppp_ex.c/.h:扩展外设特性的API。

stm32fnxx_hal.c: 表示HAL通用的API,比如HAL_Init,HAL_Dealy等。

stm32nxx_hal_conf.h:HAL配置文件。用来配置使能何种外设。

stm32l0xx_hal_def.h:包含HAL的通用数据类型定义和宏定义

stm32fnxx_II_ppp.c/.h:在一些复杂外设中实现底层功能,他们在stm32fnxx_hal_ppp.c中被调用。

3.部分其他文件作用解释说明:

stm32fnxx.h:这个是一个相当于32库最顶层的一个头文件,keil的全局宏标识符配置就主要在该文件得以应用,通过该文件实现

1)针对具体芯片型号选择对应的具体型号头文件。比如我们配置宏STM32L011xx,那么会选择包含L011系列头文件stm32l011xx.h

2)标准库还是HAL库选择对应的库头文件,比如我们宏配置有USE_HAL_DRIVER,那么会选择包含stm32l0xx_hal.h头文件。

这样针对具体型号的stm32l011xx.h和针对指定库的fn类头文件stm32l0xx_hal.h就都被包含在内了。

stm32f4xx_hal_msp.c: MCU support package板级支持包文件,其实他单独设计这个文件的初衷就是为了把mcu相关的硬件初始化都剥夺出来,方便用户在不同型号的mcu上移植。只需要知道函数名中只要带MspInit 的函数,它们的作用是进行 MCU 级别硬件初始化设置,并且它们通常会被上一层的初始化函数所调用,比如HAL_MspInit 和 HAL_MspDeInit。这两个函数分别被文件 stm32f4xx_hal.c 中的 HAL_Init 和 HAL_DeInit 所调用。实 际 上 , 我 们 在 工 程 中 直 接 删 掉stm32f4xx_hal_msp.c 文件也不会对程序运行产生任何影响。
startup_stm32f429xx.s:启动文件,针对一个系列型号一个相应的启动文件。
system_stm32f4xx.c/system_stm32f4xx.h:主要是声明和定义了系统初始化函数 SystemInit 以及系统时钟更新函SystemCoreClockUpdate

4.HAL库和标准库区别:

1)系统初始化SystemInit 函数:.s启动文件 中会设置系统复位后,直接调用 SystemInit 函数进行系统初始化作用是进行时钟系统的一些初始化操作以及中断向量表偏移地址设置。HAL库它并没有设置具体的系统时钟值,这是与标准库的最大区别,在使用标准库的时候, SystemInit 函数会帮我们配置好系统时钟配置相关的各个寄存器。 

2)HAL库对大部分外设都配置了回调函数HAL_PPP_MspInit,当我们写初始化函数HAL_PPP_Init()时,会默认调用回调函数HAL_PPP_MspInit(),默认是_weak函数。当然,如果本身是使用GPIO功能,那么没有这个回调,这里说的一般是复用功能下,我们自定义HAL_PPP_MspInit一般来针对具体硬件比如引脚进行时钟,输入输出配置,而HAL_PPP_Init上层主要设置些与MCU无关的东西,比如串口的配置波特率,奇偶校验,停止位等,这些参数设置和 具体MCU 没有关系。
5.外设时钟使能:

所有的外设时钟使能都在RCC 相关固件库文件头文件stm32f4xx_hal_rcc.h 和stm32l0xx_hal_rcc_ex.h 定义的,并且外设时钟使能在 HAL 库中都是通过宏定义标识符来实现的。

例如:

使能GPIOA时钟    __HAL_RCC_GPIOA_CLK_ENABLE();

使能DMA1时钟    __HAL_RCC_DMA1_CLK_ENABLE();

猜你喜欢

转载自blog.csdn.net/u011116085/article/details/107015470