【嵌入式小技巧】STM32 实现 SEGGER RTT 打印(超详细)


原创声明

本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!


前言

嵌入式的开发离不开log的打印,我们常常使用的是重定向printf到串口打印输出,但是会对系统的实时性产生一定的影响,RTT技术可以在一定程度解决这个问题。

我是 HinGwenWoong ,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

一、RTT 是什么?

使用RTT(Real Time Transfer),可以从目标微控制器输出信息,以及以很高的速度将输入发送到应用程序,而不会影响目标的实时行为SEGGER RTT可与任何J-Link模型和支持后台内存访问的任何受支持的目标处理器一起使用,这些处理器是Cortex-MRX目标。

RTT在双向上都支持多个通道,直至主机和目标,都可以用于不同目的,并为用户提供最大的自由度。

RTT默认实现是每个方向使用一个通道,该通道用于可打印的终端输入和输出。 使用J-Link RTT Viewer,该通道可用于多个“虚拟”终端,从而仅使用一个目标缓冲区即可打印到多个窗口(例如,一个用于标准输出,一个用于错误输出,一个用于调试输出)。 例如,可以使用一个附加的(主机)通道来发送配置文件或事件跟踪数据。

更多资料,详见其官网 SEGGER’s Real Time Transfer (RTT)

在这里插入图片描述

二、使用步骤

1.引入驱动库

  • 首先在官网选择合适的版本下载并安装 Jlink官网下载地址Jlink下载页面
  • 安装之后进入目录可以看到 Jlink 全家桶
    在这里插入图片描述
  • 在【开始】菜单栏可以看到快捷方式 【Segger RTT Viewer Vxxx.exe】,我这里安装了 V6.44c 的版本
    在这里插入图片描述
  • 去到刚刚安装文件的目录,可以看到对应Jlink版本的 RTT 驱动的压缩包
    在这里插入图片描述

  • 解压,可以见到驱动文件
    在这里插入图片描述

  • 将上面红色框的文件,复制到 SMT32 工程文件中,加入到 KEIL 工程中
    在这里插入图片描述
    并将其 头文件 也包含进工程

在这里插入图片描述

2.实现 log 打印输出

2.0 编译选项注意

一定要 取消 这个勾选!!!
在这里插入图片描述

2.1 直接使用

在 main 函数调用初始化,然后直接可以使用

#include "SEGGER_RTT.h"
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
	SEGGER_RTT_Init();
	SEGGER_RTT_printf(0, "Hello world !");  // 原接口
}

2.2 封装使用(推荐)

也可以封装接口:

/*-----------------------------------------------------------
 * Includes files
 *----------------------------------------------------------*/

/* segger rtt includes. */
#include "SEGGER_RTT.h"
#include "SEGGER_RTT_Conf.h"

#define BUFFER_INDEX 0

/*!
* @brief 封装 RTT 打印接口
*        执行条件:无
*
* @retval: 无
*/
void print_log(const char * sFormat, ...)
{	
	va_list ParamList;
	va_start(ParamList, sFormat);
	SEGGER_RTT_vprintf(BUFFER_INDEX, sFormat, &ParamList);
	va_end(ParamList);
}

/*!
* @brief 初始化 RTT 打印接口
*        执行条件:无
*
* @retval: 无
*/
void segger_rtt_init(char * str)
{
	SEGGER_RTT_Init();
	print_log(str);  // 封装接口,无需填写 BUFFER_INDEX
}

main 中初始化和打印:


#include "bsp_printlog.h" //封装接口的 .c 文件的头文件
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
	segger_rtt_init("Demo start !");  // 调用这句进行初始化以及打印开机信息【Demo start!】
	print_log("print a log\n");  //
}

2.3 效果演示

硬件上,Jlink 连接线 连接到 STM32上,打开 【Segger RTT Viewer Vxxx.exe】,连接芯片,我这里选择的是 STM32F7676IG,请根据自己所用的芯片进行选择
在这里插入图片描述
可以在 【log】标签页看到连接信息

在这里插入图片描述
将程序编译并烧录进 STM32,可以看到代码里面写的调试信息输出到 【 Segger RTT 】中,大功告成!!!
在这里插入图片描述

总结

以上是 stm32 实现 Segger RTT 打印 的全部内容,本文仅仅介绍了 Segger RTT 的使用,Segger RTT 的使用可以让我们节省一个串口的占用,还可以降低串口打印可能出现对系统实时性的影响。


更多阅读推荐

我是 HinGwenWoong ,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!


授权须知

  1. 原创文章在推送两天后才可进行转载
  2. 转载文章,禁止声明原创
  3. 不允许直接二次转载,转载请根据原文链接联系作者
  4. 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
    但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:【嵌入式小技巧】stm32 实现 Segger RTT 打印(超详细)

  1. 若需要修改文章的排版,请根据原文链接联系作者
  2. 再次感谢您的认可,转载请遵守如上转载须知!
  • 71
    点赞
  • 229
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值