CMSIS简介
CMSIS:Cortex Microcontroller Software Interface Standard,微控制器软件接口标准。由ARM和其合作的芯片厂商(ST、NXP)、软件工具厂商(KEIL、IAR),共同制定的标准。
HAL库简介
ST公司为了方便用户开发STM32芯片,提供了三种库:
- 标准外设库(Standard Peripheral Libraries)
- HAL库(硬件抽象层):Hardware Abstraction Layer
- LL库:Low Layer
直接操作寄存器:执行效率高,但时间成本高。
标准外设库:仅支持F0/1/2/3/4/L1,且目前已经停止维护。
HAL库:全系列兼容,ST目前主推的库,兼容性、易移植性,执行效率较低。
LL库:全系列兼容,与HAL库捆绑发布,轻量级,效率高,不匹配部分复杂外设。
获取STM32Cube固件包
STM32Cube固件包是ST公司根据CMSIS,制定的CMSIS Pack,不同公司推出的Pack是不一样的。
访问ST公司的官网:https://www.st.com/content/st_com/en.html
搜索STM32Cube
- BSP:板级支持包,用于适配ST官方的开发板(可参考)。
- CMSIS:符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等。
- STM32F1xx_HAL_Driver:HAL库外设驱动源码,包括F1系列HAL库源文件和头文件。
CMSIS文件夹关键文件
Device文件夹
- stm32f1xx.h:是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义。
- stm32f103xe.h:包含:中断编号定义,外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判断。
- startup_stm32f103xe.s:大容量F103系列芯片的启动文件。
- system_stm32f1xx.c/.h:定义了系统初始化函数SystemInit和系统时钟更新函数SystemCoreClockUpdate。
HAL库框架结构
HAL库文件介绍
- hal.c/h:HAL库初始化、系统地点、HAL库延时等相关函数。
- hal_conf.h:HAL库的用户配置文件,用于裁剪HAL库,配置晶振参数等。
- hal_def.h:包含HAL库通用的枚举类型数据和宏定义
- hal_cortex.h/c:内核通用函数定义和声明,如NVIC、MPU、系统软复位、systick等,主要是对core_cm3.h文件的相关函数再次封装。
- ppp.c:任意外设驱动源码
- ll_ppp.c:LL库驱动源码在hal_ppp.c或hal_ppp_ex.c中调用
如何使用HAL库