如何用 J-Link 来串口调试?
摘要:不知道大家在单片机开发中是如何打印调试信息的,大多数应该是用串口调试打印吧,在大多数的情况下,一般在制板和写代码时都会预留串口1做为调试打印用。
但是在实际开发如果没有预留串口怎么办?其实我们的下载器是可以用来作为调试打印来用的,只是很多小伙伴不知道这个功能而已,今天就来说一下如何用调试器JLink来打印信息。
1、JLink仿真调试器
下载器五花八门,但是我只用JLink,小巧方便携带。对于单片机开发者一般所用的下载器基本就是JLink和ST-Link。这两者功能差不多,JLink是SEEGER公司的,ST-Link是ST公司的,而且只支持ST系列的芯片。
只用JLink下载器调试,原因就是这玩意体积小,只有四根线,用起来太方便了,YYDS!
2、安装JLink驱动
下载链接:https://www.segger.com/downloads/jlink/。
买回来JLink驱动后,一般卖家都会提供JLink的驱动程序,驱动安装完成后就可以下载调试程序了。
当然我们现在要使用JLink的RTT功能(实时传输Real Time Transfer,可不是RT-Thread操作系统啊),就需要在官网下载完整的Jlink包,最新版本的是V7.52版本的,当然别的版本也可以。
下载完成后直接安装可以了。安装完成后你会在你的安装目录下看到如下内容:
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); //设置时钟,168Mhzdelay_init(168); //初始化延时函数LED_Init(); //初始化LED while(1){SEGGER_RTT_printf(0,"zhiguoxin666\r\n");}
}
编译没有错误之后连接好下载器
之后打开JLink安装目录下的JLinkRTTViewer.exe
按照如下配置
将代码下载到单片机中就可以看到已经完美的打印了。
5、RTT的使用技巧
1、RTT缓冲大小
有时候我们发现我们的信息不能完全的打印出来,可能是因为缓冲不够,默认缓冲区大小事1K字节,如果不够可以改大一点。
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);
}
编译、链接、下载,观察现象:
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-
大家好,我是张巧龙,一名教电子的大学老师,欢迎关注!
如何用 J-Link 来串口调试?相关推荐
- 利用VSPD、串口调试助手、Keil做串口调试
下面详细介绍下如何用虚拟串口调试串口发送接收程序. 需要用到三个软件:KEIL.VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件).串口调试助手(个人感 ...
- android spi串口调试,PIC入门3,SPI通信和串口调试实验
原标题:PIC入门3,SPI通信和串口调试实验 MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行. 程序: //适合3EPIC实验板,配置PIC的MSSP模块工作于SPI主控方式下, // ...
- Linux下串口调试及使用shell编程接收数据
串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联 ...
- 【博客8】缤果PyQt5串口调试助手V1.1(初级篇)
超级好用的Python QT GUI串口调试助手 目录 前言 一.软件概要: 二.软件界面: 1.App动态演示 2.其他扩展展示 三.main.py源码: 1.PyQt5_Serial_Debug_ ...
- 用python写的一个串口调试软件
分享一个用pyqt5+pyserial给公司写的串口调试软件 串口的发送和接收都是用多线程写的,实现界面UI与数据部分分离 支持hex发送与解析,还有定时发送功能 ui文件全是用qt desinger ...
- esp32 、stm32 移植串口调试命令linenoise
一个完整的工程哪能少的了串口命令调试器,本文介绍移植linenoise串口调试器到ARM , 源码:http://github.com/antirez/linenoise :linenoise 是g ...
- python3 GUI用户界面总结(以串口调试为例,持续改进)
本文主要目的是总结串口调试助手开发过程中遇到的问题和解决方法,以及总结通用资料以备后续参考,欢迎批评指正. 需要掌握的基础内容: 涉及到的python库的基本操作 串口通信基础 进制转换等算法问题 p ...
- linux下发送hex数据的串口调试软件,linux下模拟串口向计算机发送数据
本人新手 从网上找了个串口通信程序改了改 本来是用单片机向串口发数据测试 但现在手头没有 请问有没有什么别的方法可以用? 非常感谢 | 一.使用工具 Windows XP 串口调试器 C ...
- C8051串口调试 C8051
小白,先备份一下~~~ C8051F320串口调试,实现功能: 电脑发送数据,单片机接收,并返回,可根据led等检测状态. 遇到问题: 1.主函数中flag需在末尾清0,否则if后面的语句会发送两遍 ...
最新文章
- [转载]C# ListT的并集、交集、差集
- ArcGIS API for Silverlight开发
- 选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- 你可能也会掉进这个简单的 String 的坑
- android java.net.ConnectException: Connection 127.0.0.1:8080 refused
- java 如何秒速写一个线程启动
- 【转】其实Unix很简单
- java 关闭阻塞线程池_如果优雅地关闭ExecutorService提供的java线程池
- js中几个对象的区别和用法
- 数学猜想验证步骤_10大仍未解开的数学难题
- Java程序员必备!java商城项目难点
- 【0基础运筹学】【超详细】列生成(Column Generation)
- 兄弟 DCP-7055打印机硒鼓清零方法
- python不间断爬取微博热搜并存储
- 进制转换 二进制,八进制,十进制,十六进制互转
- windows查看本机的mac地址
- Maven中pom文件详解
- HTML/CSS常见面试题
- 全球及中国虚拟健身软件行业运营潜力与规划动向分析报告2022版
- ie firefox 点flash 卡死解决方案
热门文章
- 使用代码获得Social Media Channel绑定的service url
- Wordpress如何打开调试模式
- Hybris做增强的两种方式:In App Extension和Side by Side Extension
- how does SAP ui5 know the phone, tablet type, os type
- 处理ABAP Netweaver gateway service使用过程中遇到的400 error - invalid key predicate type for guid
- Cloud for Customer Restriction and Exclusion Product Lists
- equipment hierarchy download不完整的一个原因
- PRDICQR action column
- Eclipse里究竟是哪个文件存储的project facet信息
- Spring XSD validation cache issue