电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
手把手教你把JLink变成串口调试助手
分 享
扫描二维码分享
手把手教你把JLink变成串口调试助手
JLink
STM32
单片机
果果小师弟
关注
发布时间: 2021-08-10
丨
阅读: 721
![](https://img-blog.csdnimg.cn/93d95efff8654b1189111dead3c76153.png) **摘要**:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口1做为调试打印用。 但是在实际开发如果没有预留串口怎么办?其实我们的下载器是可以用来作为调试打印来用的,只是很多小伙伴不知道这个功能而已,今天就来说一下如何用**调试器JLink**来打印信息。 # 1、JLink仿真调试器 下载器五花八门,但是我只用JLink,小巧方便携带。对于单片机开发者一般所用的下载器基本就是JLink和ST-Link。这两者功能差不多,JLink是SEEGER公司的,ST-Link是ST公司的,而且只支持ST系列的芯片。只用JLink下载器调试,原因就是这玩意体积小,只有四根线,用起来太方便了,YYDS! ![J-Link OB ARM 仿真调试器](https://img-blog.csdnimg.cn/76e4b8cb4efc4ea1804d209301057824.png) # 2、安装JLink驱动 下载链接:https://www.segger.com/downloads/jlink/。买回来JLink驱动后,一般卖家都会提供JLink的驱动程序,驱动安装完成后就可以下载调试程序了。 ![https://www.segger.com/downloads/jlink/](https://img-blog.csdnimg.cn/052f8aa0c7664dd1a8822221650f2465.png) 当然我们现在要使用JLink的RTT功能,就需要在官网下载完整的Jlink包,最新版本的是V7.52版本的,当然别的版本也可以。下载完成后直接安装可以了。安装完成后你会在你的安装目录下看到如下内容: ![JLink安装目录](https://img-blog.csdnimg.cn/c131fe98e2fd498091bd876fd4d08e41.png) # 3、移植RTT 安装完成就好办了,RTT源码包就在我们刚刚安装的JLINK驱动的目录里面。我的目录是:`D:\Software\SEGGER\JLink_V644b\Samples\RTT` ![ ](https://img-blog.csdnimg.cn/d15cd2884b7f4f38882dcdc1510f2e60.png) 解压后具体的目录是:`D:\Software\SEGGER\JLink_V644b\Samples\RTT\SEGGER_RTT_V644b\RTT` ![ ](https://img-blog.csdnimg.cn/c5d64a9a20314a6986bf7982c5acb7ba.png) 然后将这个RTT文件夹复制到我们的编写程序的工程文件夹中 ![](https://img-blog.csdnimg.cn/433f168baa184231aeee4611e1f29809.png) 然后在项目中新建一个`RTT`分组,并将`RTT`文件夹中的两个`.c`文件添加进来。 ![](https://img-blog.csdnimg.cn/48f9cd569e924cec8d71041cfb1937cd.png) ![](https://img-blog.csdnimg.cn/e6e7bedd8e234664926d7bb38b5e94d9.png) 当然还要记得添加`RTT`的头文件路径 ![](https://img-blog.csdnimg.cn/17ee88756f114972bc3d9d6216e1d8e0.png) 到这里基本就移植成功了,是不是很简单,就是把RTT的源码添加到工程中即可,完全不需要修改别的什么操作。 # 4、RTT打印输出 接下来就可以打印输出了。 ```c #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"); } } ``` ![](https://img-blog.csdnimg.cn/4c9a78ffed7047448551786a0fe9f59c.png) 编译没有错误之后连接好下载器 ![连接好硬件](https://img-blog.csdnimg.cn/51eb5be836ca49a38cdad93f63711fc9.png) ![配置为SW模式](https://img-blog.csdnimg.cn/48fdb510f91b41d0b59a4d428ef3effd.png) 之后打开JLink安装目录下的`JLinkRTTViewer.exe` ![](https://img-blog.csdnimg.cn/46ae53d305ae474da4a755750f5a0c04.png) 按照如下配置 ![](https://img-blog.csdnimg.cn/593a0e44229d49bcadf49cf6d081d398.png) 将代码下载到单片机中就可以看到已经完美的打印了。 ![](https://img-blog.csdnimg.cn/fe936478a7784ee88099dcae4bffc9b0.png) # 5、RTT的使用技巧 ## 1、RTT缓冲大小 有时候我们发现我们的信息不能完全的打印出来,可能是因为缓冲不够,默认缓冲区大小事1K字节,如果不够可以改大一点。 ![默认1024字节](https://img-blog.csdnimg.cn/918a5dbb819747769dd2dca4d4e6de60.png) ## 2、多虚拟端口使用 RTT支持向不同的虚拟端口中打印信息,使用方法如下。 首先在RTT Viewer软件中分别打开三个虚拟端口: ![](https://img-blog.csdnimg.cn/c4bab4d099b9431f9aea2689f3e0eb5c.png) 编写代码 ```c 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](https://img-blog.csdnimg.cn/1a61c19cff6444c4888292f21749d483.png) ![窗口1](https://img-blog.csdnimg.cn/823db2cba1ca4c459e62d7ee9d2f2d2a.png) ![窗口2](https://img-blog.csdnimg.cn/6d9682bb2cab41f79003226946886121.png) ## 3、修改打印字符颜色 RTT支持不同颜色的字符显示。 ![ ](https://img-blog.csdnimg.cn/fdc3689f82424425a116da2bb6edb3da.png) 时用时在字符串前面加上对应颜色的宏定义就可以了。 ```c 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); } ``` 编译、链接、下载,观察现象: ![红色](https://img-blog.csdnimg.cn/4496cc5261564860928d7df0c21ea77d.png) ![绿色](https://img-blog.csdnimg.cn/f7a852d509044549b5970de16a768d21.png) ![蓝色](https://img-blog.csdnimg.cn/71e75c1722b740aa9e326fc47fa4f5a0.png) ## 4、使用printf重定向 项目中使用printf的地方非常多,如果可以直接修改printf重定向到RTT组件,则会非常方便。使用的方法是直接使用RTT提供的API实现fputc。 ![原子的例程](https://img-blog.csdnimg.cn/ba55f95aa0b64ae9bdadec9431eae71c.png) 重定义fputc函数 ```c //重定义fputc函数 int fputc(int ch, FILE *f) { SEGGER_RTT_PutChar(0, ch); return ch; } ``` 替换之前的代码: ```c while(1) { printf("zhiguoxin666 ,printf SEGGER RTT Terminal!\r\n"); delay_ms(1000); } ``` 编译、链接、下载 ![](https://img-blog.csdnimg.cn/610e29286c9d42d0bf366f287b65975b.png) **结语**:RTT和USRAT各有优点,要根据不同的情况选择,如果遇到一个显示项目没有预留串口用来调试打印信息,可以用别的方法。当然打印调试还有很多方法这只是其中的一种方法,如果你还有更好的方法,欢迎评论区留言哟~ ![](https://cf01.ickimg.com/bbsimages/202108/d34d551b1877b754898fad936bb7ad26.png)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
果果小师弟
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交