文档
J-Link RTT 日志与 Ozone 调试入门
目标
使用 J-Link 的 RTT(Real Time Transfer)实现零额外硬件的高速日志输出,并用 Ozone 进行图形化调试。
硬件
- J-Link 调试器(EDU/Base/Plus 均可)+ STM32 开发板
- 仅需 SWD 两根线(SWDIO + SWCLK)+ GND
一、RTT 日志集成
1. 添加 RTT 源文件到工程
# 从 SEGGER 官网或 J-Link 安装目录复制
cp /opt/SEGGER/JLink/Samples/RTT/SEGGER_RTT_V*.zip .
unzip SEGGER_RTT_V*.zip
# 将 SEGGER_RTT.c, SEGGER_RTT.h, SEGGER_RTT_Conf.h 加入工程
2. 初始化 RTT
/* main.c — RTT 日志 + J-Link 调试示例 */
#include "SEGGER_RTT.h"
int main(void) {
HAL_Init();
SystemClock_Config();
/* 初始化 RTT — 必须在主时钟配置之后 */
SEGGER_RTT_Init();
SEGGER_RTT_printf(0, "RTT 日志初始化完成!\n");
SEGGER_RTT_printf(0, "系统时钟: %lu Hz\n", HAL_RCC_GetSysClockFreq());
uint32_t count = 0;
uint32_t adc_value;
while (1) {
/* 模拟读取传感器 */
adc_value = (count * 37 + 1024) % 4096;
/* 高速日志 — 不阻塞,不影响实时性 */
SEGGER_RTT_printf(0, "[%5lu] ADC: %4lu | 电压: %d.%03dV\n",
count, adc_value,
(adc_value * 3300) / 4096 / 1000,
(adc_value * 3300) / 4096 % 1000);
count++;
HAL_Delay(10);
}
}
3. 查看 RTT 输出
# 启动 J-Link RTT Viewer(图形界面)
JLinkRTTViewer
# 或命令行 RTT Client
JLinkRTTClient
# 指定设备
JLinkRTTViewer -device STM32F407VG -if SWD -speed 4000
4. RTT 优势对比
| 方式 | 速度 | 占用引脚 | 对实时性影响 |
|---|---|---|---|
| UART printf | ~1 Mbps | 2 脚 (TX/RX) | 较高(阻塞) |
| SWO ITM | ~10 Mbps | 1 脚 (SWO) | 低 |
| RTT | ~100 Mbps | 0 脚 | 极低 |
RTT 通过 J-Link 的 SWD 通道传输,无需额外引脚!
二、Ozone 图形化调试
1. 启动 Ozone
# 命令行或桌面图标
ozone
2. 创建项目
- File → New Project Wizard
- 选择设备:
STM32F407VG - 选择接口:
SWD,速度4000 kHz - 选择固件:
firmware.elf - 点击 Finish
3. 调试功能演示
| 操作 | 方法 |
|---|---|
| 断点 | 单击行号左侧 |
| 变量监视 | 右键变量 → Watch |
| 数据采样 | View → Data Sampling → 选择变量 → Start |
| 指令跟踪 | View → Instruction Trace → 查看执行历史 |
| 代码分析 | View → Code Profile → 查看函数执行时间占比 |
| 实时曲线 | 配合 J-Scope 查看变量波形 |
4. Ozone 脚本自动初始化
// Ozone 启动脚本 (.jdebug)
void OnProjectLoad(void) {
Target.SetTraceSource(TraceSource.ETB);
Target.EnableTrace(true);
}
void OnTargetHalt(void) {
Util.Log("Target halted at: " + Util.FormatAddress(CPU.PC()));
}
三、关键点
- RTT 默认使用上行通道 0,可通过
SEGGER_RTT_printf(channel, ...)使用多个通道 - RTT 缓冲区大小在
SEGGER_RTT_Conf.h的BUFFER_SIZE_UP中配置(默认 1024 字节) - Ozone 免费提供给 J-Link 用户,功能远超 Keil/IAR 自带调试器