如何用 J |
您所在的位置:网站首页 › 烧录机是干嘛的 › 如何用 J |
摘要:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口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:\Software\SEGGER\JLink_V644b\Samples\RTT 解压后具体的目录是:D:\Software\SEGGER\JLink_V644b\Samples\RTT\SEGGER_RTT_V644b\RTT 然后将这个RTT文件夹复制到我们的编写程序的工程文件夹中 然后在项目中新建一个RTT分组,并将RTT文件夹中的两个.c文件添加进来。 当然还要记得添加RTT的头文件路径 到这里基本就移植成功了,是不是很简单,就是把RTT的源码添加到工程中即可,完全不需要修改别的什么操作。 4、RTT打印输出接下来就可以打印输出了。 #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"); } }编译没有错误之后连接好下载器 连接好硬件 配置为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!\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 窗口1 窗口2 3、修改打印字符颜色RTT支持不同颜色的字符显示。 时用时在字符串前面加上对应颜色的宏定义就可以了。 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); }编译、链接、下载,观察现象: 红色 绿色 蓝色 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!\r\n"); delay_ms(1000); }编译、链接、下载 结语:RTT和USRAT各有优点,要根据不同的情况选择,如果遇到一个显示项目没有预留串口用来调试打印信息,可以用这个的方法。 当然打印调试还有很多方法,这只是其中的一种,如果你还有更好的方法,欢迎评论区留言。 -END- 大家好,我是张巧龙,一名教电子的大学老师,欢迎关注! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |