Skip to content

[Bug] 疑似H7 HALDriver 缺失SPI6Config配置 #11626

Description

@moment-NEW

RT-Thread Version

none

Hardware Type/Architectures

none

Develop Toolchain

Other

Describe the bug

问题描述

在 STM32H7 BSP 中启用 BSP_USING_SPI6 后,工程编译失败,原因是 drv_spi.c 中已经支持并引用了 SPI6_BUS_CONFIG,经过检查发现F4等系列的SPI存在该宏,但 H7 系列的 SPI 配置模板中没有定义该宏

报错如下:

../libraries/HAL_Drivers/drivers/drv_spi.c(125): error: use of undeclared identifier 'SPI6_BUS_CONFIG'
  125 |     SPI6_BUS_CONFIG,
      |     ^

复现条件

以 STM32H7 BSP 为例:

  1. menuconfig 中启用 SPI6:
    BSP_USING_SPI=y
    BSP_USING_SPI6=y
    
  2. 生成配置和 Keil 工程:
    scons --pyconfig-silent
    scons --target=mdk5
    
  3. 使用 Keil MDK 编译工程。

编译会在 drv_spi.c 中失败。

原因猜测

drv_spi.c 中已经包含 SPI6 的支持代码:

#ifdef BSP_USING_SPI6
    SPI6_BUS_CONFIG,
#endif /* BSP_USING_SPI6 */

但是 spi_config.h 目前只定义了:

SPI1_BUS_CONFIG
SPI2_BUS_CONFIG
SPI3_BUS_CONFIG
SPI4_BUS_CONFIG
SPI5_BUS_CONFIG

缺少:

SPI6_BUS_CONFIG

对比 spi_config.h,F4 系列已经定义了 SPI6 的总线配置以及 DMA 配置:

SPI6_BUS_CONFIG
SPI6_TX_DMA_CONFIG
SPI6_RX_DMA_CONFIG

而 H7 系列目前缺少对应定义。

此外,部分 H7/H7RS BSP 的 board/Kconfig 已经暴露了 BSP_USING_SPI6 选项,例如:

bsp/stm32/stm32h7r7-artpi2
bsp/stm32/stm32h7s7-st-disco

因此启用该选项后会进入不可编译状态。

期望结果

spi_config.h 应补充 SPI6 的配置定义,至少包括:

SPI6_BUS_CONFIG

如果考虑 DMA 支持,也应补充:

SPI6_TX_DMA_CONFIG
SPI6_RX_DMA_CONFIG

可能的修复方向

或许可以参考 F4 系列的实现,在 H7 SPI 配置模板中补充 SPI6 的基础配置:

#ifdef BSP_USING_SPI6
#ifndef SPI6_BUS_CONFIG
#define SPI6_BUS_CONFIG        \
    {                          \
        .Instance = SPI6,      \
        .bus_name = "spi6",    \
        .irq_type = SPI6_IRQn, \
    }
#endif /* SPI6_BUS_CONFIG */
#endif /* BSP_USING_SPI6 */

并参考 F4 系列实现补齐 SPI6 TX/RX DMA 配置。

环境信息

RT-Thread: 当前 master / 或填写具体 commit
BSP: bsp/stm32/stm32h723-DM-MC02
MCU: STM32H723ZG
Toolchain: Keil MDK ARMClang 6.22

补充说明

本问题不是 ST HAL package 缺失导致的。pkgs --update 已正确拉取 STM32H7 HAL/CMSIS 包,且 stm32h7xx_hal_spi.c 可以正常进入编译。如果确认BUG属实的话,我会开启一个PR来修复

Other additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions