我目前正在尝试通过离开常见的开箱即用 IDE 并在 Visual Studio Code 中创建自己的内部来更好地理解嵌入式工具链。
在一些教程的帮助下,我成功地启动并运行了 STM32L433 Nucleo 板的闪烁 LED 项目。
我要做的最后一步是实现调试功能。由于我过去只通过 IDE 完成此操作,所以这部分对我来说有点棘手。 尽管如此,我还是设法让它工作,但我仍然无法理解实际发生的事情。
因此我希望你们能帮助我更好地理解这一点。
我使用带有 C/C++ 和 Cortex 调试扩展的 Visual Studio Code。在硬件方面,我使用的是 STM32L433 Nucleo-Board 以及内置 ST-Link 调试器探针。
我在 VSC 中创建了我的项目,并为调试设置创建了一个 launch.json,它看起来像这样:
{
"version":"0.2.0",
"configurations": [
{
"name": "Cortex ST-Link",
"cwd": "${workspaceRoot}",
"executable": "./build/Test.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "stlink",
"stlinkPath": "D:/CubeIDE/STM32CubeIDE_1.8.0/.../bin/ST-LINK_gdbserver.exe",
"stm32cubeprogrammer": "D:/CubeProgrammer/bin",
"device": "STM32L433RC",
"configFiles": [
"interface/stlink.cfg",
"target/stm32l4x.cfg"
],
"svdFile": "STM32L4x3.svd"
},
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "./build/Test.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"device": "STM32L433RC",
"configFiles": [
"interface/stlink.cfg",
"target/stm32l4x.cfg"
],
"svdFile": "STM32L4x3.svd"
}
]
}
两种配置都有效,我不知道这是否是正确/专业的方法,但这是我从示例和 Cortex 调试文档中找到的全部内容。如果我做错了什么,请告诉我应该采取哪些不同的做法。
到目前为止我学到的有关调试的知识如下:
让我们从 OpenOCD 配置开始。 使用的调试器是 nucleo 板的 st-link。如果我从调试控制台得到正确结果,我的 GDB 服务器将是 OpenOCD,我的客户端将是 arm-none-eabi-gdb 实用程序。 我使用 stlink.cfg 告诉服务器我使用哪个调试器,以便服务器知道如何与之通信。 到目前为止这是正确的吗?
接下来是 ST-Link 配置。 我现在使用 ST-Link-GDB 服务器而不是 OpenOCD。对于客户端,再次使用arm-none-eabi-gdb。 但是当我开始像这样执行它时,ST-Link-GDB 服务器会抛出一个错误,指出它找不到 STCubeProgrammer 实用程序。 所以我也给出了这个实用程序的路径并且它可以工作。 我现在的问题是,CubeProgrammers 在这个链条中扮演什么角色?我显然不需要 OpenOCD 的附加组件,那么为什么我需要 CubeProgrammer? 我首先认为 CubeProgrammer 是这种情况下的客户端,但我可以看到在这个调试配置中仍然调用arm-none-eabi-gdb。 即使 ST 的 GDB userguide 也只显示了服务器、调试器和客户端,概述中没有程序员...
有人可以帮助我了解幕后发生的事情以及 CubeProgrammer 的作用是什么吗?或者也许指出我在这件事上是否有一些错误的配置/理解?
提前致谢:)
致以诚挚的问候
Evox402
是的,对于 ST-Link 服务器,您确实需要指定编程器的路径,这相当复杂,尤其是在 Linux/Mac 上。我不明白为什么它不只是内置的。 cortex-debug 进行了一些更改以自动检测,但当您包含多个版本的 ST 软件时,可能会造成混乱。
您可以使用“cortex-debug.stm32cubeprogrammer”用户/工作空间设置或在 launch.json 中明确指定要使用的程序员。
提示:如果您查看“调试配置”并单击“显示命令”(或类似的东西),您可以在 Eclipse 中看到程序员的路径。
如果您使用 OpenOCD,请尝试使用 ST 分发的版本,而不是来自 Internet 的版本。
您的其他问题? STLink 和 OpenOCD 有什么区别?功能集不同,但您可能没有注意到使用 VSCode。