意法半导体提供的 STM32Cube,旨在通过减少开发工作量、时间和成本,来显著提高开发人员的工作效率。STM32Cube涵盖整个 STM32 产品系列。
STM32Cube 包括:
—一套用户友好的软件开发工具,覆盖从设计到生产的整个工程开发过程,其中包括:
‒图形软件配置工具 STM32CubeMX,可通过图形向导自动生成初始化 C 代码。
‒STM32CubeProgrammer(STM32CubeProg),支持图形接口和命令行接口的编程工具。
‒STM32CubeMonitor-Power(STM32CubeMonPwr),测量并帮助优化 MCU 功耗的监控工具。
‒STM32CubeMonitor,配有专用附加组件、利用 STM32WL 执行射频测试(动态数据包传输/接收、PER 测量)并以图形表示射频性能的多功能监控工具。
—针对每个系列提供综合的嵌入式软件平台,(比如用于 STM32WL 系列的 STM32CubeWL):
‒STM32 抽象层嵌入式软件 STM32Cube HAL,确保用户应用在 STM32 各个产品之间实现最大限度的可移植性。
‒底层 API(LL)提供快速、轻量且面向专业人士的层,比 HAL 更接近于硬件。LL API 仅可用于一组外设。
‒一组统一的中间件组件,如 FatFS、FreeRTOS™、LoRaWAN®、SubGHz_Phy、Sigfox™、KMS、SE 和mbed-crypto。
‒所有嵌入式软件实用工具均配备一套完整的示例。
STM32CubeWL 在基于 Arm® Cortex®-M 处理器的 STM32WL 系列微控制器上运行。
级别 0
此层级分为三个子层:
-板级支持包(BSP)
-硬件抽象层(HAL)
‒HAL 外设驱动程序
‒底层驱动
-基本外设用例
板级支持包(BSP)
该层提供了对应于板载硬件组件的一系列 API(如 LCD、Audio、microSD™和 MEMS 驱动程序)。它包含两
部分:
-组件
该驱动程序与板件上的外部器件(而不是 STM32)有关。组件驱动程序为 BSP 驱动程序的外部组件提供专用 API,并且可以移植到任何其他板件上。
-BSP 驱动程序
允许将组件驱动程序链接到专用板件上,并提供一组易于使用的 API 。 API 命名规则是BSP_FUNCT_Action()。示例:BSP_LED_Init(), BSP_LED_On()BSP 基于模块化架构,只需执行低层级例程,便可轻松移植到任何硬件上。
硬件抽象层(HAL)和底层(LL)
STM32CubeWL HAL 和 LL 是互补的,可满足广泛的应用要求:
-HAL 驱动程序提供面向功能的高可移植的顶层 API。它们向最终用户隐藏了 MCU 和外设的复杂性。
HAL 驱动程序提供通用多实例且面向功能的 API,通过提供可用的步骤来帮助用户简化应用程序的实现。
例如,对于通信外设(I²C、UART 等),它提供了 API,用于外设初始化和配置,以及基于轮询、中断或 DMA 处理的数据传输管理和处理通信过程中可能出现的通信错误。
HAL 驱动程序 API 分为两类:
‒为所有 STM32 系列提供通用功能的通用 API
‒以及为特定系列或特定产品编号的器件提供特殊定制功能的扩展 API。
底层 API 提供寄存器级别的底层 API,带有更好的优化,但可移植性较差。需要对 MCU 和外设技术参数有深入的了解。
LL 驱动程序旨在提供一个快速、轻量且面向专业人士的层,比 HAL 更接近于硬件。与 HAL 相反,LLAPI 不用于优化访问并非关键特性的外设,或者需要大量软件配置和/或复杂上层栈的外设。
底层(LL)驱动程序具有:
一组函数,用于根据数据结构中指定的参数,对外设主要特性进行初始化
一组函数,用于使用每个字段相应的复位值填充初始化数据结构
函数,用于外设去初始化(外设寄存器恢复为默认值)
一组内联函数,用于直接和原子寄存器访问
完全独立于 HAL,可在独立模式(无 HAL 驱动程序)下使用
涵盖全部支持的外设特性
实现双核:
‒相同的 HAL/LL 驱动程序支持单核及双核 STM32WL 系列
—在 STM32WL 双核器件中,两个内核(Cortex®-M4 和 Cortex®-M0+)可以采用相同的方式访问所有外设。这意味着,Cortex®-M4 与 Cortex®-M0+之间不存在外设分割或默认分配。为此,两个内核之间共享相同的外设 HAL 和 LL 驱动程序。
—此外,有些外设(主要是:RCC、GPIO、PWR、HSEM、IPCC、GTZC...)还具有附加的双
核特性:
“DUAL_CORE”定义用于界定仅双核系列上可用的代码(定义、函数、宏...)。
“CORE_CM0PLUS”定义用于界定双核系列上适于 Cortex®-M0+的特定配置/代码部分的代码。使用反转或“else”语句时,此定义用于界定双核系列上适于 Cortex®-M4+的特定配置/代码部分的代码。