MDK+JLink实现SWOViewer或RTTViewer调试信息
硬件与软件准备
所需硬件:支持SWO/RTT的MCU(如STM32 Cortex-M系列)、J-Link调试器
所需软件:Keil MDK(含ULINK驱动)、J-Link驱动、SWOViewer/RTTViewer工具
SWOViewer配置与实现
SWO原理:基于ITM(Instrumentation Trace Macrocell)的数据输出
MDK工程配置:
- 启用Debug选项中的"Trace Enable"
- 设置Core Clock与SWO频率(需匹配硬件)
J-Link配置: - 使用J-Link Commander或J-Link SWO Viewer工具
- 指定SWO时钟源与目标速率
代码实现:
#include <stdio.h>
void ITM_SendChar(uint32_t ch) {
while (ITM->PORT[0].u32 == 0);
ITM->PORT[0].u8 = (uint8_t)ch;
}
RTTViewer配置与实现
RTT原理:通过内存块实现双向数据通信
SEGGER RTT库集成:
- 在MDK中添加
SEGGER_RTT.c和SEGGER_RTT_Conf.h - 配置缓冲区大小(默认
SEGGER_RTT_CONFIG_BUFFER_SIZE_UP)
代码调用示例:
SEGGER_RTT_WriteString(0, "Hello RTT!\n");
SEGGER_RTT_printf(0, "Value: %d", var);
J-Link连接:
- 使用J-Link RTT Viewer或Telnet连接
- 指定目标设备与RTT控制块地址(自动检测常见MCU)
性能对比与优化
SWO与RTT的延迟、带宽对比(如SWO受限于引脚速率,RTT依赖内存访问)
常见问题:
- SWO时钟配置错误导致数据丢失
- RTT缓冲区溢出或未初始化
优化建议: - 调整SWO波特率与MCU时钟同步
- 增加RTT缓冲区大小或启用多通道
应用场景扩展
SWO适用于低带宽时序分析(如事件时间戳)
RTT适合高吞吐量日志输出(如实时传感器数据)

542

被折叠的 条评论
为什么被折叠?



