摘要:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口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功能(实时传输real time transfer,可不是rt-thread操作系统啊),就需要在官网下载完整的jlink包,最新版本的是v7.52版本的,当然别的版本也可以。下载完成后直接安装可以了。安装完成后你会在你的安装目录下看到如下内容:
jlink安装目录
3、移植rtt
安装完成就好办了,rtt源码包就在我们刚刚安装的jlink驱动的目录里面。我的目录是:d:softwareseggerjlink_v644bsamplesrtt
解压后具体的目录是:d:softwareseggerjlink_v644bsamplesrttsegger_rtt_v644brtt
然后将这个rtt文件夹复制到我们的编写程序的工程文件夹中
然后在项目中新建一个rtt分组,并将rtt文件夹中的两个.c文件添加进来。
当然还要记得添加rtt的头文件路径
到这里基本就移植成功了,是不是很简单,就是把rtt的源码添加到工程中即可,完全不需要修改别的什么操作。
4、rtt打印输出
接下来就可以打印输出了。
#include sys.h#include delay.h#include usart.h#include led.h#include segger_rtt.hint 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); }}
编译没有错误之后连接好下载器
连接好硬件 配置为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!); segger_rtt_setterminal(1); segger_rtt_printf(0,zhiguoxin666,segger rtt terminal 1!); segger_rtt_setterminal(2); segger_rtt_printf(0,zhiguoxin666,segger rtt terminal 2!); delay_ms(1000);}
编译、链接、下载,观察现象:
窗口0 窗口1 窗口2
3、修改打印字符颜色
rtt支持不同颜色的字符显示。
时用时在字符串前面加上对应颜色的宏定义就可以了。
while(1){ segger_rtt_setterminal(0); segger_rtt_printf(0,rtt_ctrl_text_redzhiguoxin666,segger rtt terminal 0!); segger_rtt_setterminal(1); segger_rtt_printf(0,rtt_ctrl_text_greenzhiguoxin666,segger rtt terminal 1!); segger_rtt_setterminal(2); segger_rtt_printf(0,rtt_ctrl_text_bluezhiguoxin666,segger rtt terminal 2!); 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!); delay_ms(1000);}
编译、链接、下载
结语:rtt和usrat各有优点,要根据不同的情况选择,如果遇到一个显示项目没有预留串口用来调试打印信息,可以用这个的方法。当然打印调试还有很多方法,这只是其中的一种,如果你还有更好的方法,欢迎评论区留言哟~
虚拟现实的三个特征_虚拟现实的起源
中低压配电网的无功补偿方式与优化
不同封装技术下单个元件的贴装面积
电容麦噪音很大的原因和解决方案
还肾没长好呢 iPhone8就来了!发布时间已确认 售价1000美元还双卡双待?
如何用调试器JLink来打印信息
什么是高速电路?“高频”和“高速”有什么区别
如何使用ESP模块构建自己的WiFi交换机以及如何控制任何设备
人工智能越来越无所不能,人类该如何自处?
介绍两种方法来避免正在执行中的任务中断
静电计级运算放大器ADA4530-1的性能及应用
EOS基础公链与以太坊和比特币的对比分析
玻璃将逐步取代PCB而成为MiniLED背光背板的首选
思特威推出全新5000万像素图像传感器SC580XS赋能手机影像系统
x86主板工业级主板与工控级主板之间的区别是什么
新汽车显示屏需要合适的背光照明LED驱动器
用Raspberry Pi和SensorMedal制作IoT跳绳设备 第四部分:在设备上安装显示器以增加动力
25亿!优必选科技在国际市场签订史上最大AI教育项目
NB-IoT模组使用中的常见问题及解决办法
OPPO R9s红色为什么还那么火?