1写在前面
SWO:Serial Wire Output,串行线输出
RTT:Real Time Transfer,实时传输
前面SWO文章,实现原理是通过MCU的SWO引脚输出信息(到显示终端SWV)。
而本文讲述的RTT不需要通过额外SWO引脚,即可实现printf输出,而且性能(耗时)远高于SWO。
2关于RTT
SEGGER实时传输(RTT)是一种在嵌入式应用中实现交互式用户I/O的威廉希尔官方网站 。
它结合了SWO和半主机( semihosting)的优点,具有很高的性能。
使用RTT,可以从目标微控制器输出信息,并以非常高的速度向应用程序发送输入,而不会影响目标的实时性。
Cortex - M0不支持SWO,而本文讲述的RTT则支持Cortex - M0,文末提供STM32F0工程。
3关于J-Link RTT Viewer
J-Link RTT Viewer是在调试主机上使用RTT功能的Windows GUI应用程序。
RTT Viewer可以独立使用,打开自己与J-Link的连接,并与正在运行的调试会话目标或并行,连接到它并使用现有的J-Link连接。
RTT Viewer支持RTT的主要功能:
·通道0上的终端输出
·将文本输入发送到通道0
·最多16个虚拟终端,只有一个目标通道
·控制文本输出:彩色文本,擦除控制台
·在通道1上记录数据
·
·
本文主要结合J-Link RTT Viewer讲述,当然支持RTT的还有J-Link RTT Client 和J-Link RTT Logger。
更多相关介绍,可以参看:
https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer
(公号不支持外链接,请复制链接到浏览器打开)
4获取RTT源码
我们需要在工程中添加RTT源码,同时需要J-Link RTT Viewer查看器支持。
J-Link / J-Trace下载地址(Windows版本):
https://www.segger.com/downloads/jlink/JLink_Windows.exe
安装之后,在安装目录下包含RTT源码:
C:Program Files (x86)SEGGERJLinkSamplesRTT
解压SEGGER_RTT_V***.zip之后,复制整个RTT目录源码到你工程。
提示:
解压之后,只需复制RTT目录就行。
4.1 添加RTT到工程
添加源码文件到工程主要有两个步骤:1.添加源码文件到工程。 2.添加文件路径。
这里不讲述具体添加过程,Keil 和 IAR之前有讲述,请参看我的文章:
Keil新建基础软件工程
IAR新建基础软件工程
当然,我下面有提供添加好的源码工程。
4.2 应用程序
调用RTT的打印,和常规的printf类似。
添加头文件:#include "SEGGER_RTT.h"
再调用SEGGER_RTT_printf函数打印输出:
这里SEGGER_RTT_printf和print不同的是:前面多了一个“终端号”参数。(我们使用终端0)
5RTT Viewer配置、输出
和前面讲述的SWV查看器类似,配置相关信息即可输出。
安装目录:C:Program Files (x86)SEGGERJLink
下载程序到MCU,连接J-Link,打开安装目录下的J-Link RTT Viewer,配置参数:
输出效果:
6下载
为方便大家理解,提供源码工程下载,参考代码:
STM32F051(HAL)_JLink-RTT
STM32F103(HAL)_JLink-RTT
百度网盘:
https://pan.baidu.com/s/1aYBuHtOgtLqLvj6SsMYlQA
提取码:nbd3
提示:
1.公众号不支持外链接,请复制链接到浏览器打开。
2.源码仅供个人学习参考,不一定适用于实际项目。
3.若链接失效,请关注公众号,回复『printf系列教程』获取最新链接。
7
-
串行
+关注
关注
0文章
237浏览量
33847 -
SWOT
+关注
关注
0文章
4浏览量
7969 -
Printf
+关注
关注
0文章
83浏览量
13660
发布评论请先 登录
相关推荐
评论