原本想发在大杂烩里边,但是权限不够,所以就在这里发一下。
用来跟大家分享,也用来记录自己的学习过程,以便以后再次用到的时候,能够更轻松的解决问题。
我们在做STM32开发的过程中,经常需要使用串口把一些数据打印出来,方便调试。
但是有时候硬件没有预留UART端口,硬件也没有设计CH340这样的串口转换器。
但是仍然需要把内部数据打印出来。
很多小伙伴知道Keil在Debug状态下有printf函数可以用,但是这种方法需要对keil做很多设置,还需要用到SWO脚,比较麻烦(但是这种方法不限于调试器~)。
使用J-link或者J-link OB(JTAG或SWD接口)的小伙伴,其实除了使用Debug printf功能外,J-link还有一个RTT的功能。
RTT只需要在keil工程中添加几个 .c 和 .h 文件,然后使用SEGGER官网的J-link工具就能打印出内部数据。
具体操作方法如下:
1.在SEGGER官网下载J-link工具,下载链接:https://www.segger.com/downloads/jlink/JLink_Windows.exe
2.把下载下来的exe文件安装好,然后把安装路径下 SEGGERJLinkSamplesRTT文件夹中的SEGGER_RTT_V648b.zip文件解压。
3.把解压出来的文件中,SEGGER_RTT_V648bRTT路径下的.c和.h文件都添加到keil工程中;
把SEGGER_RTT_V648bSyscalls路径下的SEGGER_RTT_Syscalls_KEIL.c添加到keil工程中。(如果是其他编译器,则使用对应的文件,方法类似)
4.在main.c文件中添加头文件#include <SEGGER_RTT.h>和#include <SEGGER_RTT_Conf.h>。
在main函数中添加初始化函数SEGGER_RTT_Init();
在需要打印数据的地方,添加SEGGER_RTT_printf(0,&quot;Test%d
&quot;,123456);(参数0为必须项,之后的参数与printf相仿,具体可查看SEGGER_RTT_printf.c文件中的内容)。
5.打开J-Link RTT Viewer 工具,选择File -> Connect,设置参数如图。
6.参数设置中的Address的设置,如果使用“Aoto Detection”选项,RTT能够正常打印的话,本教程就结束。
7.参数设置中的Address的设置,如果使用“Aoto Detection”选项,RTT不能正常打印的话,就选择Address项,如图中绿色框所示。
8.Address的值(红色框中的值),可以在keil工程的.map文件中找到。
打开.map文件,搜索关键词_SEGGER_RTT,其中有一行内容为: _SEGGER_RTT 0x2000010c Data 168 segger_rtt.o(.bss)
中间的0x2000010c,即为需要填入的Address值。
9.参数设置好后,点击OK,会在LOG窗口看到相应的LOG日志,最后一行显示“LOG: RTT Viewer connected.”则为连接成功。
(如果还有其他问题,请自行解决~)
至此,在MCU每次执行SEGGER_RTT_printf()函数的时候,都会在ALL Terminals窗口打印出相应的内容。 |