ST意法半导体
直播中

李颜

8年用户 1463经验值
私信 关注
[问答]

TouchGFX Designer下载工程到STM32H7S7-DK报错的原因?

我在使用TouchGFX Designer下载工程,编译无错误,下载提示错误,日志如下:
    Flash        make -f ../../gcc/Makefile flash        make -C D:/STM32/stm32H7s_work/lugl_mypro1/gcc/ --no-print-directory -f makefile_boot  flash        Linking Boot/TouchGFX/build/bin/target.elf        Producing additional output formats...          target.hex   - Combined internal+external hex          intflash.elf - Internal flash, elf debug          intflash.hex - Internal flash, hex              -------------------------------------------------------------------                               STM32CubeProgrammer v2.17.0                          -------------------------------------------------------------------        ST-LINK SN  : 003F00203033510135393935        ST-LINK FW  : V3J15M6        Board       : STM32H7S78-DK        Voltage     : 3.29V        Error: ST-LINK error (DEV_TARGET_NOT_HALTED)        2nd connect tentative with frequency (8MHz)        ST-LINK SN  : 003F00203033510135393935        ST-LINK FW  : V3J15M6        Board       : STM32H7S78-DK        Voltage     : 3.29V        Error: ST-LINK error (DEV_TARGET_NOT_HALTED)        make[2]: *** [_intflash_] Error 1        d:/stm32/stm32H7s_work/lugl_mypro1/gcc/include/flash_sections_int_ext.mk:10: recipe for target '_intflash_' failed        makefile_boot:45: recipe for target 'flash' failed        make[1]: *** [flash] Error 2        ../../gcc/Makefile:8: recipe for target 'flash' failed        make: *** [flash] Error 2        Failed    Failed看了信息的提示,是连接到STLINK错误,但是我使用STM32CubeIDE下载是正常的。



回帖(1)

莫联雪

2025-6-20 17:41:24

看到你在STM32H7S7-DK开发板上使用TouchGFX Designer下载时遇到的问题了。你提供的日志很关键,但看起来只显示了编译链接Boot/TouchGFX/build/bin/target.elf成功,并没有完整的错误信息输出(通常在链接行之后会显示实际的下载命令和错误)。


虽然完整的错误信息缺失,但根据经验,针对 STM32H7S7-DK 和 TouchGFX,“Flash” 步骤失败最常见的原因有以下几个:


? 1. ST-LINK 调试器连接问题



  • USB 连接不稳: 请检查 USB 数据线是否牢固连接在开发板和电脑上(特别注意开发板上的 USB ST-LINK 接口,不是 UART 或 USB OTG 接口)。

  • 开发板供电: 确保开发板通过 USB 或外部电源适配器正常供电。STM32H7S7功耗较大,仅靠 USB ST-LINK 供电有时可能不稳(尽管开发板设计上通常支持)。

  • ST-LINK 驱动问题:

    • 检查设备管理器: 在 Windows 设备管理器中查看 通用串行总线设备其他设备 下是否有 STMicroelectronics STLink dongle 或类似设备。旁边是否有黄色感叹号❓?有则表示驱动未正确安装或损坏。

    • 更新/重新安装驱动: 强烈建议安装或更新到最新版本的 STM32CubeProgrammer。安装时会包含最新最稳定的 ST-LINK USB 驱动。


  • ST-LINK 固件过旧: ST-LINK 调试器本身可能需要固件升级,尤其是在使用新芯片时(如 H7S7)。

    • 使用 STM32CubeProgrammer 升级: 打开 STM32CubeProgrammer -> Help -> ST-LINK Upgrade。连接开发板后按照提示升级 ST-LINK 固件。这是非常常见且关键的解决步骤!



? 2. 目标配置错误



  • 错误的开发板型号选择: 在 TouchGFX Designer 创建工程时,必须确保在 Project Configuration -> Target Hardware 中明确选择了 STM32H7S7-DK (STM32H7S78-DISCO)。如果选成了普通的 H750 或 H743 Discovery,设置(特别是 Flash/RAM 地址)会不匹配。

  • 调试接口配置错误:

    • OpenOCD 脚本兼容性: TouchGFX 的 GCC Makefile 系统底层使用 OpenOCD 通过 ST-LINK 进行下载。检查你的工程 gcc 目录下(通常在 Application/Target/gcc 或类似路径)的 OpenOCD 配置文件(如 stlink.cfg, board/stm32h7s78-disco.cfg)。确保它是为 H7S7 和这款开发板设计的。

    • 默认配置可能未适配 H7S7: H7S7 是一款非常新的异构多核(H7+M4)芯片,它的启动过程(boot_cm0plus + boot_cm7)和调试配置与之前的 H7 芯片有很大不同。标准 OpenOCD 脚本可能没有正确处理它的启动顺序。

      • 尝试在 Makefile 的 OpenOCD 命令中加入额外的复位配置或目标文件引用,但修改复杂。




? 3. 内存映射/Linker Script 配置问题



  • H7S7 的特殊内存架构: H7S7 拥有高达 1.4GB 的地址空间和复杂的多域(AXI, SRAM1-4, SRAM5, SRDAM, OCTOSPI1, ...)内存映射。

  • 外部 SDRAM 配置缺失: STM32H7S7-DK 配备了大容量 SDRAM (128MBx16)。TouchGFX 应用的帧缓冲通常需要放在这里。必须在下载之前正确初始化 SDRAM 控制器!

    • 检查启动流程: 标准工程模板中,应该有一个 BootLoader 项目(你在日志里看到了 makefile_boot)和一个 Application 项目。BootLoader 的一个关键作用就是执行硬件初始化,包括 SDRAM。确保你的工程中存在 BootLoader 且成功编译链接。

    • Linker Script 地址错误: 如果 Linker Script (.ld) 文件(在 Application 和 BootLoader 中都有)里定义的内存地址(特别是 RAM 区域)与芯片手册或开发板原理图不符,或者没有正确指向已初始化的 SDRAM 区域供应用使用,下载尝试会失败。



? 4. 调试端口被占用或冲突



  • 其他程序占用了 ST-LINK: 确保没有其他软件(如 Keil, IAR, STM32CubeIDE, STM32CubeProgrammer, 甚至是之前的 TouchGFX 下载进程)正在占用开发板上的 ST-LINK。关闭所有可能连接调试器的程序。


? 5. Boot 引脚配置问题



  • 启动模式错误: 检查开发板上的 BOOT0BOOT1 跳线帽或开关。对于从内部 Flash 启动并调试,BOOT0 通常需要设置为 0 (接地)。请参考开发板用户手册的 Boot Configuration 部分。错误的启动模式可能导致调试器无法连接或控制内核。


? 诊断和解决步骤




  1. 检查物理连接和驱动:



    • 重新插拔 USB 线(ST-LINK 口)。

    • 确认电脑设备管理器中识别到 ST-LINK 无黄色❓感叹号。

    • 立刻使用 STM32CubeProgrammer 更新 ST-LINK 固件!




  2. 尝试使用 STM32CubeProgrammer 手动下载:



    • 打开 STM32CubeProgrammer。

    • 选择连接方式为 ST-LINK

    • 配置端口为 SWD

    • 尝试连接(Connect 按钮)。这一步就能测试 ST-LINK 驱动、连接、目标芯片复位/识别是否正常。

    • 如果连接成功:

      • 转到 Erasing & Programming 页面。

      • Programming Algorithm 路径指向 TouchGFX 工程生成的 *.stldr 文件(通常在 STM32CubeXXX/Utilities/PC_Software/STM32CubeProg/ExternalLoader 目录下,或由 TouchGFX生成)。

      • 加载你的应用固件文件(通常在 gcc/Boot/TouchGFX/build/bin/target.hexgcc/Application/Target/bin/target.hex)。

      • 点击 Start Programming。这能绕过 TouchGFX 自身的 OpenOCD 脚本问题。如果手动下载成功,问题就在 TouchGFX 的下载脚本配置上。


    • 如果连接失败: CubeProgrammer 会给出错误信息(如 “No device found on target”, “Could not reset Cortex-M core!”, “Under Reset” 等)。这些信息是诊断硬件/驱动/复位问题的关键!重点解决连接失败的问题。




  3. 验证目标硬件选择和 SDRAM:



    • 在 TouchGFX Designer 中双击打开你的 .touchgfx 项目文件。

    • 进入 Project Configuration -> Target Hardware100% 确认选的是 STM32H7S7-DK (STM32H7S78-DISCO)

    • 检查工程中是否包含 BootLoader 项目。查看 BootLoader 的 main.cBoardInit.c 等文件,确认调用了 MX_SDRAM_Init() 或其他 SDRAM 初始化函数。




  4. 检查 OpenOCD 输出 (关键):



    • 在 TouchGFX Designer 中再次尝试 “Run Target”

    • 打开 Help -> Show Logs -> Console Log

    • 滚动日志,仔细查找在 Linking Boot/TouchGFX/build/bin/target.elfProducing additional output formats... 之后的内容。

    • 你会看到类似 openocd -c "script ..." -c "program ..." -c "reset" -c "exit" 的命令行及其完整输出。

    • 这些 openocd 命令的输出是解决下载问题的终极线索!? 请提供这部分完整的命令行输出(通常在最后几行),它包含 OpenOCD 尝试连接、擦除、编程、复位时的具体错误描述(例如:超时、无法连接、找不到设备、扇区保护、校验失败、地址错误、复位失败等)。有了这个输出,就能精确锁定问题。




  5. STM32H7S7 专用启动流程:



    • 留意 OpenOCD 输出中是否有关键信息“starting Cortex-M0+ core first”。H7S7 必须先启动 M0+ 内核才能启动 M7 核心。OpenOCD 可能需要额外指令处理此流程。




✅ 总结


请优先进行:



  • 更新 ST-LINK 固件

  • 尝试用 STM32CubeProgrammer 手动连接和下载

  • 提供 TouchGFX Designer 日志中 openocd 命令的具体输出(在 “Run Target” 失败后的 Console Log 里找)


这些步骤能覆盖90%以上类似问题。H7S7系列芯片由于其复杂结构,初始配置容易成为坑点,耐心按步骤操作应该能解决!期待你的新日志信息来进一步诊断??。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分