0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用调试器JLink来打印信息

嵌入式情报局 来源:果果小师弟 作者:果果小师弟 2022-10-14 09:55 次阅读

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

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

1、JLink仿真调试器

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

3f883264-4afe-11ed-a3b6-dac502259ad0.pngJ-Link OB ARM 仿真调试器

2、安装JLink驱动

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

406f8a7e-4afe-11ed-a3b6-dac502259ad0.pnghttps://www.segger.com/downloads/jlink/

当然我们现在要使用JLink的RTT功能(实时传输Real Time Transfer,可不是RT-Thread操作系统),就需要在官网下载完整的Jlink包,最新版本的是V7.52版本的,当然别的版本也可以。下载完成后直接安装可以了。安装完成后你会在你的安装目录下看到如下内容:

40b011f2-4afe-11ed-a3b6-dac502259ad0.pngJLink安装目录

3、移植RTT

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

4138128c-4afe-11ed-a3b6-dac502259ad0.png

解压后具体的目录是:D:SoftwareSEGGERJLink_V644bSamplesRTTSEGGER_RTT_V644bRTT

41762892-4afe-11ed-a3b6-dac502259ad0.png

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

4195b64e-4afe-11ed-a3b6-dac502259ad0.png

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

41b60a0c-4afe-11ed-a3b6-dac502259ad0.png41cf39a0-4afe-11ed-a3b6-dac502259ad0.png

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

426eb250-4afe-11ed-a3b6-dac502259ad0.png

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

4、RTT打印输出

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

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

intmain(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
");
}
}
427e302c-4afe-11ed-a3b6-dac502259ad0.png

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

42ae91a4-4afe-11ed-a3b6-dac502259ad0.png连接好硬件 4301df9e-4afe-11ed-a3b6-dac502259ad0.png配置为SW模式

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

43487bc0-4afe-11ed-a3b6-dac502259ad0.png

按照如下配置

43bab3f2-4afe-11ed-a3b6-dac502259ad0.png

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

43d27a96-4afe-11ed-a3b6-dac502259ad0.png

5、RTT的使用技巧

1、RTT缓冲大小

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

43f48ff0-4afe-11ed-a3b6-dac502259ad0.png默认1024字节

2、多虚拟端口使用

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

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

4408d62c-4afe-11ed-a3b6-dac502259ad0.png

编写代码

while(1)
{
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal0!
");
SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal1!
");
SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,"zhiguoxin666,SEGGERRTTTerminal2!
");
delay_ms(1000);
}

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

44323e18-4afe-11ed-a3b6-dac502259ad0.png窗口0 445ee44a-4afe-11ed-a3b6-dac502259ad0.png窗口1 447b8276-4afe-11ed-a3b6-dac502259ad0.png窗口2

3、修改打印字符颜色

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

449de262-4afe-11ed-a3b6-dac502259ad0.png

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

while(1)
{
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_RED"zhiguoxin666,SEGGERRTTTerminal0!
");
SEGGER_RTT_SetTerminal(1);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_GREEN"zhiguoxin666,SEGGERRTTTerminal1!
");
SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,RTT_CTRL_TEXT_BLUE"zhiguoxin666,SEGGERRTTTerminal2!
");
delay_ms(1000);
}

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

44d7b29e-4afe-11ed-a3b6-dac502259ad0.png红色 44eb4638-4afe-11ed-a3b6-dac502259ad0.png绿色 451a267e-4afe-11ed-a3b6-dac502259ad0.png蓝色

4、使用printf重定向

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

4532a67c-4afe-11ed-a3b6-dac502259ad0.png原子的例程

重定义fputc函数

//重定义fputc函数
intfputc(intch,FILE*f)
{
SEGGER_RTT_PutChar(0,ch);
returnch;
}

替换之前的代码:

while(1)
{
printf("zhiguoxin666,printfSEGGERRTTTerminal!
");
delay_ms(1000);
}

编译、链接、下载

45d6ae7a-4afe-11ed-a3b6-dac502259ad0.png

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620829
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74511
  • 调试器
    +关注

    关注

    1

    文章

    288

    浏览量

    23405
  • Jlink
    +关注

    关注

    5

    文章

    108

    浏览量

    37305

原文标题:教你把JLink变成串口调试助手

文章出处:【微信号:嵌入式情报局,微信公众号:嵌入式情报局】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DM8168的OSD算法中,用Vps_printf()不能输出打印信息

    在DM8168的dsp端加入自己的算法,但是现在在调试发现,算法内部不能输出打印信息。 在TI自己提供的OSD算法下用Vps_printf加入打印信息进行测试,在
    发表于 05-31 08:59

    GT_Trace()没有打印信息

    个函数中我用GT_Trace()打印信息,编译链接通过,但我运行CE_DEBUG=2 ./XX 后,发现.C文件的这个函数中的GT_Trace()并没有打印信息,而算法文件中可以正常打印信息,这是
    发表于 06-21 15:28

    跑源码没有任何打印信息

    如图,我烧进去的是源码,为什么没有任何打印信息呢,求助
    发表于 01-28 03:17

    串口打印信息操作步骤分享!

    打印调试信息是编程技术中最基础也是十分重要部分。虽然单片机不能像计算机那样有类似控制台打印信息的功能,但是单片机同样可以通过串口打印信息。在
    发表于 09-30 04:37

    如何利用串口输出printf的打印信息

    PC机上,printf输出到显示设备,在嵌入式linux系统,一般利用printf输出调试信息,需要重定向到串口。以AT91RM9200为例,简要说明如何利用串口输出printf的打印信息。 在
    发表于 11-04 07:10

    STM32是如何使用printf函数给串口打印信息

    STM32是如何使用printf函数给串口打印信息的?STM32使用printf函数给串口打印信息的执行步骤有哪些?
    发表于 12-02 07:02

    何用Printf() 函数打印信息

    何用Printf() 函数打印信息
    发表于 12-15 07:56

    串口DEBUG只有打印信息的功能吗

    使用串口DEBUG,只是看到boot的一些信息,无法登录?这是因为这个debug功能只是打印信息?额外问一下,想在target 端 编译开发,要安装GCC等,但是不可以使用连到包管理服务,有什么其他方法?你用的是Ubuntu的
    发表于 01-11 06:25

    如何自制一个基于jlink的无线调试器

    如何自制一个基于jlink的无线调试器
    发表于 01-18 06:47

    CH32V3x07调试串口输出打印信息时不能输出完全是什么原因?

    请教下,用您们的CH32V3x07芯片,在程序调试时候,串口打印信息不能一次将应该打印信息打印完成,在下次触发
    发表于 07-19 07:33

    jlink-v8调试器jlink接口与swd接口有什么不同呢

    mdk集成开发环境境中,jlink-v8调试器jlink接口与swd接口有什么不同呢?
    发表于 08-29 14:18

    手把手教你玩转RVSTAR—SEGGER Embedded Studio+JLink调试器

    速度有限,推荐使用码云,其链接如下:https://gitee.com/riscv-mcu/ses_nuclei_sdk_projects配置使用RTT打印输出JLink调试器可以使用SEGGER
    发表于 03-29 14:27

    Nuclei_Studio运行N101_irqc_demo串口不显示打印信息怎么解决?

    使用MCU200T开发板和蜂鸟调试器调试N101,Nuclei_Studio 运行N101_irqc_demo过程中正常,但是串口不显示打印信息,请问有人知道吗?
    发表于 08-12 08:23

    使用Nuclei Studio+JLink进行RISC-V嵌入式开发的方法

    打印内容可以在RTT Viewer中查看打印信息。 05 使用JLink调试器链接开发板到PC 使用JLink
    发表于 08-16 07:00

    jlink调试器的工作原理

    我们平时使用的jlink调试器就是使用JTAG接口,JTAG以前是用于测试芯片的一种通信方式,现在部分ARM或者DSP等都存在JTAG接口,这样我们就可以通过JTAG接口访问CPU以及其内部状态信息等。
    的头像 发表于 03-08 12:32 730次阅读
    <b class='flag-5'>jlink</b><b class='flag-5'>调试器</b>的工作原理