stm32 使用J-Link RTT Viewer打印日志

文章目录

  • stm32 使用J-Link RTT Viewer
  • 一、RTT功能简介
  • 二、准备工作
    • 安装J-Link软件驱动:
    • 获取RTT驱动文件:
    • 配置工程:
  • 三、使用RTT打印日志
    • 初始化RTT:
    • 打印日志:
    • 查看日志:
  • 四、高级功能
    • 封装print_log函数:
    • 支持时间戳和打印颜色:
  • 五、注意事项
    • 确保RTT缓冲区配置正确:
  • 避免频繁打印:
  • 六 、总结

stm32 使用J-Link RTT Viewer

通常情况下我们是用uart进行串口打印,但如果硬件资源紧张没有专门的串口打印接口这么办呢?
那就用到了下边的日志打印方法:SEGGER公司提供的J-Link RTT(Real-Time Transfer)功能为我们提供了一种更加高效、便捷的日志打印解决方案。本文将详细介绍如何在STM32上使用J-Link RTT Viewer进行日志打印。

一、RTT功能简介

SEGGER RTT是一种用于实时数据传输的技术,它允许开发者在运行时将数据从目标微控制器传输到主机,同时也可以接收输入。这项技术的优势在于其高速性和实时性,对目标处理器的实时性影响极小,非常适合用于日志打印和调试信息输出。

二、准备工作

安装J-Link软件驱动:

首先,需要从SEGGER官网下载并安装J-Link的软件驱动。安装完成后,可以在开始菜单中找到J-Link RTT Viewer的快捷方式。
在这里插入图片描述

获取RTT驱动文件:

在J-Link的安装目录下,可以找到RTT相关的驱动文件。通常这些文件会被打包在一个压缩包中,解压后可以得到需要的.c和.h文件。
在这里插入图片描述

配置工程:

将RTT的驱动文件添加到STM32的工程中。这包括将.c文件添加到工程中,并将RTT的头文件路径添加到工程的包含路径中。
在这里插入图片描述

三、使用RTT打印日志

初始化RTT:

在程序的开始阶段,需要调用SEGGER_RTT_Init()函数来初始化RTT。这个函数会设置RTT所需的内部结构和缓冲区。

打印日志:

使用SEGGER_RTT_printf()函数可以像使用C语言的printf()函数一样打印日志。这个函数接受一个缓冲区索引和一个格式化字符串,以及可变数量的参数。缓冲区索引用于指定RTT的通道,STM32通常使用默认的0通道。

查看日志:

启动J-Link RTT Viewer,选择正确的芯片型号和连接方式。
在这里插入图片描述

连接成功后,就可以在下方的终端界面中看到打印的日志信息了。
SEGGER_RTT_Init(); // 初始化RTT
SEGGER_RTT_printf(0, “Hello RTT!\r\n”); // 打印日志
在这里插入图片描述

在这里插入图片描述

四、高级功能

封装print_log函数:

为了方便使用,可以封装一个print_log函数,这样在使用时就不需要每次都指定终端号和格式化字符串了。
修改缓冲区大小:
如果打印的日志内容很长,可能会遇到缓冲区不够的问题。此时,可以通过修改SEGGER_RTT_Conf.h文件中的BUFFER_SIZE_UP宏定义来增加缓冲区的大小。

支持时间戳和打印颜色:

J-Link RTT Viewer支持在日志中添加时间戳和打印颜色,但这需要在MCU程序中实现相应的接口。例如,可以通过在日志字符串中添加特定的控制字符来设置颜色。
颜色定义:
在这里插入图片描述
设置显示红色
在这里插入图片描述

打印显示:
在这里插入图片描述

五、注意事项

确保RTT缓冲区配置正确:

在配置RTT时,需要确保RTT缓冲区的位置和大小没有与其他内存区域发生冲突。可以通过查看编译生成的.map文件来确认RTT缓冲区的配置情况。

避免频繁打印:

虽然RTT的实时性很好,但如果频繁打印大量的日志信息,仍然可能会对程序的实时性产生一定的影响。因此,在实际使用中需要根据需要合理控制打印的频率和内容。

六 、总结

J-Link RTT Viewer为STM32等嵌入式设备的日志打印提供了一种高效、便捷的解决方案。通过合理配置和使用RTT功能,我们可以更加高效地调试和优化嵌入式系统,提高开发效率和质量。希望本文能够帮助大家更好地理解和使用J-Link RTT Viewer进行STM32的日志打印工作。

程序源码链接:
stm32 使用J-Link RTT Viewer打印日志-源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457597.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

021、深入解析前端请求拦截器

目录 深入解析前端请求拦截器: 1. 引言 2. 核心实现与基础概念 2.1 基础拦截器实现 2.2 响应拦截器配置 3. 实际应用场景 3.1 完整的用户认证系统 3.2 文件上传系统 3.3 API请求缓存系统 3.4 请求重试机制 3.5 国际化处理 4. 性能优化实践 4.1 请求合并…

三周精通FastAPI:15 请求文件和同时请求表单+文件

官网文档:请求文件 - FastAPI 请求文件 File 用于定义客户端的上传文件。 from fastapi import FastAPI, File, UploadFileapp FastAPI()app.post("/files/") async def create_file(file: bytes File()):return {"file_size": len(file)}…

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本:5.6、7.3 Mysql版本:5.6,5.7需要关闭严格模式 Nginx:任何版本 Redis:需要给所有PHP版本安装Redis扩展,不需要设置Redis密码 最好使用面板安装:宝塔面板 - 简单好用的…

Kafka消费者故障,出现活锁问题如何解决?

大家好,我是锋哥。今天分享关于【Kafka消费者故障,出现活锁问题如何解决?】面试题?希望对大家有帮助; Kafka消费者故障,出现活锁问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资…

【C++】string类 (模拟实现详解 下)

我们接着上一篇【C】string类 (模拟实现详解 上)-CSDN博客继续对string模拟实现。从这篇内容开始,string相关函数的实现就要声明和定义分离了。 1.reserve、push_back和append 在string.h的string类里进行函数的声明。 void reserve(size_…

Maven项目报错:invalid LOC header (bad signature)

文章目录 Maven项目报错:invalid LOC header (bad signature)1. Maven项目加载或Pom.Xml刷新后仍出现如下错误2. 解决方法 Maven项目报错:invalid LOC header (bad signature) 1. Maven项目加载或Pom.Xml刷新后仍出现如下错误 错误提示: in…

【Spring MVC】请求参数的获取

我的主页 1. 获取 URL 中的参数 获取 URL 中的参数是通过 PathVariable 注解实现的 RequestMapping("/article/{articleId}") public String method12(PathVariable("articleId") String articleId){return "接收到参数articleId: " articleI…

书生第四期作业:L0G4000 任务作业

模型下载 在github-codespace 登录codespace安装依赖: 运行下载的py文件,下载模型配置文件, 下载完成 在intern-studio开发机 下载配置文件 下载完成

2024系统架构师---真题考试知识点

1.逻辑地址的构成是“逻辑地址&页内地址”,而物理地址的构成“物理块号&页内地址”,因此只要找出逻辑地址中那几位表示逻辑页号基本就完成了。页内大小4k4*2的10次方2的12次方,可以得出页内地址占12位,因此1B1AH的后12位&…

群控系统服务端开发模式-系统架构图

一、开发服务(1.0版本): 平台前端服务、平台api接口服务、国外api处理服务; 二、开发服务(2.0版本): 国内客户端前端服务、国内客户端api接口服务、国外客户端前端服务、国外客户端api接口服务; 三、运行服务(1.0版本)&#xff…

JavaWeb合集22-Apache POI

二十二、Apache POI Apache POI是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java 序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI都是用于操作Excel文件。 使用场景:银行网银系统导出…

【Android】Kotlin教程(2)

文章目录 1.空安全2.let安全调用3.非空断言操作符!!4.空合并操作符 ?:5.异常6.先决条件函数7.substring8.split函数9.replace10.字符串比较11.安全转换函数12.标准库函数1.apply2.run3.with4.also5.takeIf6.takeUnless 1.空安全 为了避免NullPointerException,Kot…

【2024|滑坡数据集论文解读3】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集

【2024|滑坡数据集论文解读3】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集 【2024|滑坡数据集论文解读3】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集 文章目录 【2024|滑坡数据集论文解读3】CAS滑坡数据集:用…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一,预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二,select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

c++编解码封装

多态版编解码 对服务器和客户端的结构体进行序列化然后对数据进行反序列化 案例分析 代码demo Codec.h #pragma once #include <iostream>class Codec { public:Codec();virtual std::string encodeMsg();//string是标准库的string类virtual void* decodeMsg();virtu…

西瓜书《机器学习》符号表KaTex表示

写这篇post的缘故是最近整理机器学习的相关公式&#xff0c;经常要用到KaTex, 但网络上搜索到的西瓜书符号表的表示有些并不准确或不严谨&#xff0c;本着严谨治学的态度&#xff0c;整理了一下符号表的KaTex表示&#xff0c;希望有所帮助,整理过程中参考了《南瓜书》和 KaTex官…

Flutter TextField和Button组件开发登录页面案例

In this section, we’ll go through building a basic login screen using the Button and TextField widgets. We’ll follow a step-bystep approach, allowing you to code along and understand each part of the process. Let’s get started! 在本节中&#xff0c;我们…

软件系统建设方案书(word参考模板)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

ctfshow(259->261)--反序列化漏洞--原生类与更多魔术方法

Web259 进入界面&#xff0c;回显如下&#xff1a; highlight_file(__FILE__);$vip unserialize($_GET[vip]); //vip can get flag one key $vip->getFlag();题干里还提示了网站有一个flag.php界面&#xff0c;源代码如下&#xff1a; $xff explode(,, $_SERVER[HTTP_X…

Docker容器操作

Docker容器操作 启动容器 docker run -it 镜像名(镜像id) bash当利用docker run来创建容器时&#xff0c;Docker在后台运行的标准操作包括&#xff1a; 检查本地是否存在指定的镜像&#xff0c;不存在就从公有仓库中下载利用镜像创建并启动一个容器分配一个文件系统&#xf…