使用RTT代替UART,把你的JLink变成串口调试助手~

简介: 不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口1做为调试打印用。

摘要:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口1做为调试打印用。

但是在实际开发如果没有预留串口怎么办?其实我们的下载器是可以用来作为调试打印来用的,只是很多小伙伴不知道这个功能而已,今天就来说一下如何用调试器JLink来打印信息。

1、JLink仿真调试器

下载器五花八门,但是我只用JLink,小巧方便携带。对于单片机开发者一般所用的下载器基本就是JLink和ST-Link。这两者功能差不多,JLink是SEEGER公司的,ST-Link是ST公司的,而且只支持ST系列的芯片。只用JLink下载器调试,原因就是这玩意体积小,只有四根线,用起来太方便了,YYDS!

J-Link OB ARM 仿真调试器

2、安装JLink驱动

下载链接:https://www.segger.com/downloads/jlink/。买回来JLink驱动后,一般卖家都会提供JLink的驱动程序,驱动安装完成后就可以下载调试程序了。

https://www.segger.com/downloads/jlink/

当然我们现在要使用JLink的RTT功能,就需要在官网下载完整的Jlink包,最新版本的是V7.52版本的,当然别的版本也可以。下载完成后直接安装可以了。安装完成后你会在你的安装目录下看到如下内容:

JLink安装目录

3、移植RTT

安装完成就好办了,RTT源码包就在我们刚刚安装的JLINK驱动的目录里面。我的目录是:D:\Software\SEGGER\JLink_V644b\Samples\RTT

解压后具体的目录是:D:\Software\SEGGER\JLink_V644b\Samples\RTT\SEGGER_RTT_V644b\RTT

然后将这个RTT文件夹复制到我们的编写程序的工程文件夹中

然后在项目中新建一个RTT分组,并将RTT文件夹中的两个.c文件添加进来。

当然还要记得添加RTT的头文件路径

到这里基本就移植成功了,是不是很简单,就是把RTT的源码添加到工程中即可,完全不需要修改别的什么操作。

4、RTT打印输出

接下来就可以打印输出了。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "SEGGER_RTT.h"

int main(void)
{ 
    HAL_Init();                        //初始化HAL库    
    Stm32_Clock_Init(336,8,2,7);      //设置时钟,168Mhz
    delay_init(168);                   //初始化延时函数
    LED_Init();                        //初始化LED    
    
    while(1)
    {
         SEGGER_RTT_printf(0,"zhiguoxin666\r\n");
    }
}

编译没有错误之后连接好下载器

连接好硬件

配置为SW模式

之后打开JLink安装目录下的JLinkRTTViewer.exe

按照如下配置

将代码下载到单片机中就可以看到已经完美的打印了。

5、RTT的使用技巧

1、RTT缓冲大小

有时候我们发现我们的信息不能完全的打印出来,可能是因为缓冲不够,默认缓冲区大小事1K字节,如果不够可以改大一点。

默认1024字节

2、多虚拟端口使用

RTT支持向不同的虚拟端口中打印信息,使用方法如下。

首先在RTT Viewer软件中分别打开三个虚拟端口:

编写代码

while(1)
{
    SEGGER_RTT_SetTerminal(0);
    SEGGER_RTT_printf(0,"zhiguoxin666,SEGGER RTT Terminal 0!\r\n");
    SEGGER_RTT_SetTerminal(1);
    SEGGER_RTT_printf(0,"zhiguoxin666,SEGGER RTT Terminal 1!\r\n");
    SEGGER_RTT_SetTerminal(2);
    SEGGER_RTT_printf(0,"zhiguoxin666,SEGGER RTT Terminal 2!\r\n");
    delay_ms(1000);
}

编译、链接、下载,观察现象:

窗口0

窗口1

窗口2

3、修改打印字符颜色

RTT支持不同颜色的字符显示。

时用时在字符串前面加上对应颜色的宏定义就可以了。

while(1)
{
    SEGGER_RTT_SetTerminal(0);
    SEGGER_RTT_printf(0,RTT_CTRL_TEXT_RED"zhiguoxin666,SEGGER RTT Terminal 0!\r\n");
    SEGGER_RTT_SetTerminal(1);
    SEGGER_RTT_printf(0,RTT_CTRL_TEXT_GREEN"zhiguoxin666,SEGGER RTT Terminal 1!\r\n");
    SEGGER_RTT_SetTerminal(2);
    SEGGER_RTT_printf(0,RTT_CTRL_TEXT_BLUE"zhiguoxin666,SEGGER RTT Terminal 2!\r\n");
    delay_ms(1000);
}

编译、链接、下载,观察现象:

红色

绿色

蓝色

4、使用printf重定向

项目中使用printf的地方非常多,如果可以直接修改printf重定向到RTT组件,则会非常方便。使用的方法是直接使用RTT提供的API实现fputc。

原子的例程

重定义fputc函数

//重定义fputc函数 
int fputc(int ch, FILE *f)
{     
    SEGGER_RTT_PutChar(0, ch);
    return ch;
}

替换之前的代码:

while(1)
{
    printf("zhiguoxin666 ,printf SEGGER RTT Terminal!\r\n");
    delay_ms(1000);
}

编译、链接、下载

结语:RTT和USRAT各有优点,要根据不同的情况选择,如果遇到一个显示项目没有预留串口用来调试打印信息,可以用别的方法。当然打印调试还有很多方法这只是其中的一种方法,如果你还有更好的方法,欢迎评论区留言哟~

关注微信公众号:[果果小师弟],获取更多精彩内容!
智果芯—服务于百万大学生和电子工程师

相关文章
|
12月前
|
API UED 开发者
Labview串口通信VISA实现串口收发
Labview串口通信VISA实现串口收发
120 0
arduino环境基于wemos串口调试小助手控制小车前后左右烧写源码
arduino环境基于wemos串口调试小助手控制小车前后左右烧写源码
106 0
arduino环境基于wemos串口调试小助手控制小车前后左右烧写源码
|
监控 网络协议 测试技术
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
- 监视串行线路或以太网上的通信数据 - 支持多达 28 种数据格式,包括:Signed、Unsigned、Hex、Binary、Long、Float、Double等 - 支持 Modbus 协议地址和 PLC 地址相互切换 - 对任意数量寄存器中的数据绘制实时图表,监控数据的变化趋势 - 支持同时创建多个连接网络和大量从站设备 - 通过多个标签页进行管理,快速在从站设备之间进行切换 - 通过表格的形式管理寄存器,支持添加变量名和注释,支持切换背景与前景颜色 - 导出/导出从站设备寄存器数据到Excel - 内置字节转换工具,方便将Long、Float、Double类型数据转换为寄存器中的数据
294 0
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
|
存储 芯片 UED
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
481 0
|
C语言
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
255 0
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
|
Linux
zynq操作系统: Linux驱动开发串口波特率 非标准波特率 10mb
zynq操作系统: Linux驱动开发串口波特率 非标准波特率 10mb
465 0
zynq操作系统: Linux驱动开发串口波特率 非标准波特率 10mb
STM32:串口通信(串口发送)(内含:1.接线图+2.实物图+3.代码部分)
STM32:串口通信(串口发送)(内含:1.接线图+2.实物图+3.代码部分)
1324 0
STM32:串口通信(串口发送)(内含:1.接线图+2.实物图+3.代码部分)
|
AliOS-Things 物联网 开发者
Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制 | 学习笔记
快速学习 Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制
250 0
Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制 | 学习笔记
|
区块链 开发工具 C语言
教你用Qt开发一个串口上位机控制LED
教你用Qt开发一个串口上位机控制LED
811 0
教你用Qt开发一个串口上位机控制LED
|
区块链 开发工具 C语言
手把手教你用Qt写一个串口助手控制LED
手把手教你用Qt写一个串口助手控制LED
467 0
手把手教你用Qt写一个串口助手控制LED