STM32打印log--使用J-Link RTT Viewer及遇到问题

1. 概述

以往总是通过串口打印log,但经常因资源限制,无法打印。最近接触到J-Link RTT Viewer,本文目的是记录下使用方法(只需要把J-Link安装目录下的源文件,添加到自己的工程就可以了)。
参考连接:【嵌入式小技巧】STM32 实现 SEGGER RTT 打印(超详细),根据博客自己操作了下。

2. 找到驱动文件

按照如下,进入J-Link安装目录,可以找到源文件的压缩包:
在这里插入图片描述
解压后文件如下:
在这里插入图片描述
进入RTT文件夹,这里面就是需要添加到Keil工程的文件:
在这里插入图片描述

3. 添加到工程

在keil工程中添加驱动文件的两个.c文件:
在这里插入图片描述
添加初始化程序

SEGGER_RTT_Init();
SEGGER_RTT_printf(0, "Hello world !");

在这里插入图片描述

4. 查看打印结果

启动J-Link RTT Viewer:
在这里插入图片描述
设置下连接方式,选择对应的MCU。这里设置了芯片的资源范围,测试了下,使用auto就可以:
在这里插入图片描述
设置好后,就进入了终端界面。在下方会显示连接状态,这里因为MCU已经运行了程序,所以立刻打印了Hello world!
在这里插入图片描述

5. 封装print_log函数

主要是为了使用更加方便,不用再加终端号:

void print_log(const char * sFormat, ...)
{	
	va_list ParamList;
	va_start(ParamList, sFormat);
	SEGGER_RTT_vprintf(BUFFER_INDEX, sFormat, &ParamList);
	va_end(ParamList);
}

6. 遇到的问题

6.1 打印超长数据

当要打印的内容很长,如一个将近2K的CA证书,就会出现打印不全的问题。需要修改默认长度,全局搜索BUFFER_SIZE_UP
在这里插入图片描述

6.2 不支持打印中文?

使用模组ping谷歌,响应信息,发现打印中文会乱码:
在这里插入图片描述
该如何显示中文呢?

6.3 通用打印格式 - 预定义宏

#define LED_DEBUG_ENABLE

#if defined(LED_DEBUG_ENABLE)
#define led_debug(...)  rtt_print_log(__VA_ARGS__)
#else
#define led_debug(...)
#endif

led_debug("%s: %s: %d\n", __FILE__, __func__, __LINE__);

实际打印效果:

…/User/nb_device_led.c: rgb_led_on: 114

参考链接:KEIL编译器预处理器和预定义宏(include,ifdef,def等)

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值