文章

RTT新一代调试技术试用

目的:ARM单片机需要打印调试信息

环境:WIN10 、STM32H7VB系统板、JLINK调试器

SWD接口下有个SWV

SWV 是由仪器化跟踪宏单元 ITM(Instrumentation Trace Macrocell)和 SWO 构成的。 SWV 实现了一种从 MCU 内部获取信息的低成本方案, SWO 接口支持输出两种格式的跟踪数据, 但是任意时刻只能使用一种。两种格式的数据编码分别是 UART(串行) 和 Manchester(曼彻斯特)。当前 JLINK 仅支持 UART编码, SWO 引脚可以根据不同的信息发送不同的数据包。 当前 M3/M4 可以通过 SWO 引脚输出以下三种信息:

(1) ITM 支持 printf 函数的 debug 调用(工程需要做一下接口重定向即可)。 ITM 有 32 个通道, 如果使用 MDK 的话,通道 0 用于输出调试字符或者实现 printf 函数, 通道 31 用于 Event Viewer,这就是为什么实现 Event Viewer 需要配置 SWV 的原因。

(2) 数据观察点和跟踪 DWT(Data Watchpoint and Trace)可用于变量的实时监测和 PC 程序计数器采样。

(3)时间戳, ITM 还附带了一个时间戳的功能:当一个新的跟踪数据包进入了 ITM 的 FIFO 时, ITM就会把一个差分的时间戳数据包插入到跟踪数据流中。跟踪捕获设备在得到了这些时间戳后,就可以找出各跟踪数据之间的时间相关信息。另外,在时间戳计数器溢出时也会发生时间戳数据包。

新一代调试技术

RTT是SEGGER开发板的,基于SWD调试接口的数据通信方式,仅需SWDIO和SWCLK。而Event Recorder是MDK开发的,和RTT类似的通信机制。相比基于SWO引脚的ITM数据传输,速度要快很多。


Jlink驱动下载链接进入官网下载驱动,如下图,根据自己的环境选择下载。

1. 下载上面的资源包并进行安装

2. 安装路径任意位置

3. 一路next

安装完成后,windows10有这个软件列表就算成功

文件路径如下!

移植RTT库

找到安装路径下的这个压缩包进行解压!

解压后文件如下

需要如下文件

将上面的文件复制到在stm32工程中,路径随意就行

MDK中添加c文件和头文件路径

取消下面如下选项

在main中添加头文件

#include "SEGGER_RTT.h"

这样使用

SEGGER_RTT_Init();
SEGGER_RTT_printf(0, "Hello world !\r\n");  // 原接口

到此移植完成

调试

然后打开上面JLinkRTTViewer这个软件,点击File中的Connect

以stm32h7vb为例进行如下设置

然后这个窗口就会打印信息

此方法不管是在调试还是正常运行时打印信息都OK

Enjoy it!

License:  CC BY 4.0