1. 简介
- STM32CubeG0 github
- CMSIS on GitHub
- STM32CubeG0:为STM32G0 Series提供封装
- 官方从F4后面再出的产品就没有标准外设库了,所以G0是比较新的产品,只能用HAL或LL库。一般来说,用CUBE库上手更容易,而且大把例程可以参考,对于时序苛刻的应用,可以用LL库的。
- G0没有SPL(Standard Peripheral Libraries:标准外设库),G0和F0是不兼容的,所以只能使用HAL、LL、寄存器
- STM32Cube™ Hardware Abstraction Layer (HAL): 确保整个 STM32 产品系列的最大可移植性
- STM32Cube™ Low-Layer(LL)APIs:通过对硬件的高度用户控制确保最佳性能和占用空间
2. STM32启动文件
- 启动文件主要用来进行堆栈的初始化、中断向量表的定义和中断函数的定义。启动文件要引导进入系统main函数,Reset_Handler中断处理函数是唯一被实现了的函数,其在系统启动时会被调用。以下就是Reset_Handler实现的代码:
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
3. CMSIS
- CMSIS指的是ARM Cortex™ 微控制器软件接口标准(Cortex Microcontroller Software Interface Standard),其提供与供应商无关的硬件抽象层,为处理器和外设实现一致,简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程并缩短新设备的上市时间。
- 我们知道不同厂家,比如TI,ST,Freescale,Nordic Semiconductor等不同半导体厂家都有基于Cortex M系列内核的MCU产品,但是这些MCU的外设却大不相同,外设的设计、接口、寄存器等都不一样,因此一个能够非常熟练对STM32进行开发的工程师很难快速地上手开发一款他不熟悉的,尽管是Cortex M内核的芯片。而CMSIS的目的是让不同厂家的Cortex M内核的MCU至少在内核层次上能够做到一定的一致性,提高软件移植的效率,而这就是CMSIS出现的最主要原因。
3.1 CMSIS结构
- 这里简单介绍一下CMSIS的文件结构,CMSIS包含如下四个部分:
- CMSIS-CORE
- 提供与 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口
- CMSIS-DSP
- 包含以定点(分数 q7、q15、q31)和单精度浮点(32 位)实现的 60 多种函数的 DSP 库
- CMSIS-RTOS
- 用于线程控制、资源和时间管理的实时操作系统的标准化编程接口
- CMSIS-SVD
- 包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件
3.2 CMSIS框架
- 以下是CMSIS 5.x标准的软件架构图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b5aec78e21359dcd20aff4fab997602e.png)
- 从上图可以看到,CMSIS 5.x软件架构主要分为以下三层:应用代码层、CMSIS软件层 和 微控制器层,其中 CMSIS软件层 起着承上启下的作用,一方面该层对微控制器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,简化了应用程序开发的难度,使开发人员能够在完全透明的情况下进行应用程序的开发。如果没有CMSIS标准,那么各个半导体公司可能会自己制定各自产品的库函数的命名规则,而这会使得软件在不同厂家芯片上的移植变得困难。也正是如此,CMSIS层的实现也相对复杂些。有关CMSIS更详细的介绍请访问ARM官网。
4. STM32CubeG0
- STM32CubeG0固件组件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e05b24f748dc3259deaa29c24094d66d.png)
4.1 STM32CubeG0固件结构
- STM32CubeG0由3个独立的层级组成,但高Level可方便调用低Level。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8328de38062a37842cf814ff3e074922.png)
4.1.1 Level 0
- Level0由以下子层组成:
- Board support package (BSP) :该层提供了一组与硬件板中的硬件组件(例如 LCD、Audio、microSD™ 和 MEMS 驱动程序)相关的 API。
- Hardware abstraction layer (HAL)
- HAL peripheral drivers:HAL 驱动程序提供面向高级功能的高度可移植的 API。 它们向最终用户隐藏了 MCU 和外围设备的复杂性。
- Low-layer drivers:低层 API 提供寄存器级别的低级 API,具有更好的优化但可移植性较差。 他们需要对 MCU 和外设规范有深入的了解。LL 驱动程序旨在提供一个快速轻量级的面向专家的层,它比 HAL 更接近硬件。
- Basic peripheral usage examples
4.1.2 Level 1
- 本层包含两个子层:
- Middleware components
- USB PD (Power Delivery) library
- FreeRTOS™:Open source standard、CMSIS compatibility layer、 Tickless operation during low-power mode、Integration with all STM32Cube™ middleware modules
- FAT file system:FatFS FAT open source library、Long file name support、RTOS and standalone operation
- Examples based on the middleware components
4.2.2 Level 2
- 该级别由单层组成,包括基于中间件服务层、低级抽象层和基于板卡功能的基本外围使用应用程序的全局实时和图形演示。