vscode + STM32CubeIDE/Cortex-Debug + jlink:启用trace
·
1.下载源码:https://github.com/SEGGERMicro/RTT
通用使用与配置
要将 RTT 集成到项目中,需将 RTT/SEGGER_RTT.c 添加到项目的源文件中,并将 RTT 目录添加为包含目录。
RTT/SEGGER_RTT_ASM_ARMv7M.S 是可选的汇编优化实现文件,可作为额外的源文件添加(Cortex-M3/M4/M7代码中默认配置启用),用于替代 RTT 函数的 C 语言实现。该文件兼容 ARMv7M 和 ARMv8M 处理器,并支持大多数工具链。
RTT 可通过 SEGGER_RTT_Conf.h 进行配置。在大多数情况下,默认配置已足够使用,无需修改 SEGGER_RTT_Conf.h。若需要进行额外配置,建议将 SEGGER_RTT_Conf.h 复制到项目的配置目录中,并在副本上进行修改。这样可以避免在更新软件包时配置被覆盖。
2.在CMakeList.txt中添加.c和头文件路径
3.在代码中初始化
#include "SEGGER_RTT.h"
int main(void) {
// ... 硬件初始化
SEGGER_RTT_Init(); // 初始化 RTT
// 使用 RTT 打印
SEGGER_RTT_printf(0, "Hello from STM32G431 via RTT!\n");
while(1) {
// ...
}
}
4.查看
方法1:J-Link RTT Viewer。此时不能一边在线调试一边读取结果。
方法二:集成到vscode,可在线调试时打印
launch.json中,原工程类型“jlinkgdbtarget”不支持RTT,新增设置:
{
"name": "Debug with J-Link & RTT",
"type": "cortex-debug", // 确保类型cortex-debug
"request": "launch",
"cwd": "${workspaceFolder}",
"preLaunchTask": "build", // 这个名称需要和 tasks.json 中的任务名匹配
"executable": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}",
"servertype": "jlink", // 指定 GDB 服务器为 J-Link
"device": "STM32G431VB", // 明确指定设备型号
"interface": "swd",
"runToEntryPoint": "main",
// 在此处即可正常使用 rttConfig
"rttConfig": {
"enabled": true,
"address": "auto",
"decoders": [
{
"port": 0,
"type": "console",
"label": "RTT Output"
}
]
}
}
task.json中定义:
{
"label": "build", // 这个标签必须与 preLaunchTask 一致
"type": "shell",
"command": "cmake",
"args": [
"--build", // 构建参数
"${command:cmake.buildDirectory}", // 指定构建目录
"--parallel", "8" // -j8 参数
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"],
"detail": "编译调试目标"
}
安装插件:
点击运行:
TERMINAL中新增一个页面,可以看到trace打印:
5.重定向printf
重写_write
// GCC 环境下,printf 调用的是 _write,而不是 fputc
_ssize_t _write(int file, char *ptr, int len)
{
//HAL_UART_Transmit(&uart_debug, (uint8_t *)ptr, len, 0xFFFF);
SEGGER_RTT_Write(0, ptr, len);
return len;
}
现在可以实现jlink+vscode编译、调试、烧录一条龙!
更多推荐



所有评论(0)