想要打印调试信息,发现串口不够用了,手边没有USB转TTL模块?代码自己测试好好的,屏蔽了打印信息之后,代码运行异常了,咋整?EASY!今天小飞哥教你如何让你手中的JLINK成为调试利器,10分钟搞不定,你打我~
资料保存在gitee仓库,获取方法:资料获取
可以在官网下载,选择对应的系统,对应的JLINK驱动版本
https://www.segger.com/downloads/jlink
当然了,也可以通过文章中放的资料链接下载
一路不要反抗,静静地安装就行了...
OK-->finis,安装是比较简单的
打开目录(这是我的安装目录),进入到Samples目录下 C:\Program Files\SEGGER\JLink\Samples
RTT文件夹下即是我们接下来要用到的源码文件
此外还需要config目录下的SEGGER_RTT_Conf.h文件
最终需要的文件为
找一个可以正常运行的工程,小飞哥是以STM32F407ZGT6为主控做的一个分享,大家伙可以根据自己的MCU进行移植
工程目录下中新建RTT目录,并添加到工程中,添加RTT相关驱动源码
包含RTT的路径进来
此时编译,应该是稳妥妥的,没问题的...
重点来了,移植完成该如何使用呢?
这里是有个example的文件夹的
里面有好几个示例,咱们只来看看框框中的即可,其他的有兴趣,自行研究~
里面是打印一些信息,我们来移植几个进工程里面去
在while循环中,我们打印一些信息
另外,RTT也封装好了printf函数,红框中是一些支持的数据类型
到这里忽然意识到,像串口,我们有个串口调试助手可以监测打印的信息,JLINK打印的信息怎么监测呢
不用担心,官方是有成套方案的,我们找到这么个软件
打开软件,选择USB->芯片型号->默认值就行我选择的是通道0,代码中配置的为通道0,这样我们就看到了期望打印的信息啦
使用RTT封装的printf测试看看,英文字符,数字都显示OK,中文乱码了...
莫慌,接下来打开一个叫RTTClient的东西,记住这个端口,下面要考
显示效果还是可以的,中文也显示出来了
这个输出界面毕竟还是有点丑,只要思想不滑坡,方法总比困难多,接下来我们借助第三方软件,来进行高级点的操作,可以使用xshell,mobaxterm,putty等软件,建立telnet连接
找到这个端口,19021,我这里是用的是mobaxterm软件
连接成功
如果中文输出乱码的话,修改一下终端字符编码格式
修改字符编码格式为
修改之后,输出正常啦
从RTT封装的函数来看,目前仅仅支持下面的一些数据类型,暂不支持浮点型,小飞哥也还没有找到直接输出浮点型数据的方法,需要稍微改一下
浮点数输出配置,需要在rtt封装的SEGGER_RTT_vprintf函数中加入下面代码,本质上是把浮点数转换为了字符串输出
case 'f':
case 'F':
{
char ch[10]={0};
const char * s=ch;
double a = va_arg(*pParamList, double);
sprintf(ch,"%4.3f",a);//可以在这里进行精度的控制
do{
c = *s;
s++;
if (c == '\0') break;
_StoreChar(&BufferDesc, c);
}while(BufferDesc.ReturnValue >= 0);
}
break;
测试下浮点数输出效果,nice啊,浮点数也可以打印了
如果到这里就结束了的话,那还不够,接下来来点比较个性化的操作,对于强迫症的小伙伴可能是好消息
如果有小伙伴就喜欢红色字体,怎么整,在SEGGER_RTT.h中有一些关于字体颜色,背景色的配置,可以根据自己的需要进行配置
来简单测试几个看看效果,很酷有没有...
关于Jlink更多实用技巧,可以查看以下文章:
Jlink使用技巧之合并烧写文件
Jlink使用技巧之烧写SPI Flash存储芯片
Jlink使用技巧之虚拟串口功能
Jlink使用技巧之读取STM32内部的程序
Jlink使用技巧之单独下载HEX文件到单片机
Jlink使用技巧之J-Scope虚拟示波器功能