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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions