J-Link 调试器 使用方式与典型场景
四、使用方式与典型场景
示例一:命令行脚本化烧录
把上面的命令存成 flash.jlink,然后执行:
JLinkExe -device STM32F407VG -if SWD -speed 4000 \
-autoconnect 1 -CommanderScript flash.jlink
在 CI 或产线上,这个脚本可以改成接收固件路径与序列号参数,实现一条命令完成擦除、烧录、校验。
示例二:GDB Server 加 GDB 调试
JLinkGDBServer -device STM32F407VG -if SWD -speed 4000 -port 2331
arm-none-eabi-gdb build/firmware.elf
target remote localhost:2331
monitor reset
monitor halt
load
break main
continue
monitor reg
monitor 开头的命令由 J-Link 处理,不是 GDB 原生命令,可以用来复位、停机、读寄存器。IDE 里配置调试器时,本质上填的就是这套参数。
示例三:RTT 实时日志
在固件里加入 SEGGER RTT 源码,初始化后就可以往缓冲区写日志,PC 端用 RTT Viewer 或 J-Link Commander 的 exec 命令读取:
SEGGER_RTT_Init();
SEGGER_RTT_printf(0, "tick=%u, adc=%d\n", tick, adc_value);
读取端:
JLinkExe -device STM32F407VG -if SWD -speed 4000 -autoconnect 1
J-Link> exec SetRTTAddr 0x20000000
更常见的做法是直接开 J-Link RTT Viewer,它会自动搜索 RTT 控制块地址,并支持多个虚拟通道。RTT 宿主读缓冲、目标只负责写,几乎不打断实时性,比串口打印更适合高频日志。缓冲区大小和通道数可以在 RTT 的配置头文件里改。
适合与不适合
- 适合:开发阶段的在线调试、死机现场取证、量产烧录、需要 RTT 高频日志的场景、跨多家芯片的统一工具链。
- 不适合:目标板完全没有引出调试口、芯片调试端口被永久熔断、需要指令级跟踪(那要 J-Trace 一类带跟踪能力的探针)。另外在半主机模式下做高频打印会显著拖慢 CPU,实时控制回路里不要用。

