四时宝库

程序员的知识宝库

嵌入式小技巧:单片机STM32 实现 SEGGER RTT 打印(超详细)

大家好,今天给大家介绍基于单片机STM32实现SEGGER RTT 打印,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。

前言

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

一、RTT 是什么?

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

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

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

二、使用步骤

1.引入驱动库

  • 首先在官网选择合适的版本下载并安装 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 的使用可以让我们节省一个串口的占用,还可以降低串口打印可能出现对系统实时性的影响。

完整代码可进群免费领取!!!

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:扫码进群领资料

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接