Jlink使用技巧之虚拟串口功能
前言
串口调试是单片机开发过程必不可少的一个功能,一般是使用一个UART-TTL的串口模块来实现串口的功能,其实下载调试使用的Jlink仿真器也可以实现串口调试的功能,本篇文章将介绍如何使用Jlink实现虚拟串口功能。
ITM简介

ITM是ARM Cortex-M系列内核芯片中的一种全新的调试功能,可以方便的通过调试器来实现printf调试功能。来自STM32中文参考手册的介绍:
ITM ( 指令跟踪微单元 instrumentation trace macrocell):ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成:
- 软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。
- 硬件跟踪:ITM会发布由DWT产生的信息包。
- 时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。用户在设置或使用ITM之前,必需先使能异常调试和监视控制寄存器(Debug Exception and Monitor Control Register)的TRCEN位。
1.将ITM端口寄存器定义添加到源代码中
在程序开始处添加以下代码:
#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA 0x01000000
2.重定向printf函数
添加重定向printf函数代码:
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}
以上两段代码可以添加在usart.c文件中,如果文件中已经有了重定向printf的代码,要屏蔽掉,只保留一个重定向。
3.在应用程序中添加调试信息
在程序中添加需要输出的调试信息:
printf("电子电路开发学习:mcu149, Test: %.1f \r\n" ,test += 0.1);
4.设置ITM端口0以使能调试功能
在进行调试之前要先使能ITM调试功能,具体配置如下图所示:

5.确认硬件的连接方式。
使用ITM调试机制必须使用SWD模式,而且必须要连接SWO,SWO对应JTAG接口的13脚,即至少需要连接4根线。如下图所示:

6.打开Debug(printf)窗口
进入Debug调试模式之后,调出Debug(printf)窗口,View - Serial Windows - Debug (printf) Viewer,如下图所示:

程序运行之后,就会在printf窗口看到串口输出的信息。

参考资料:
JLink_Windows_V614b软件下载链接:JLink_Windows_V614b.exe
历史精选文章:
- Jlink使用技巧之合并烧写文件
- Jlink使用技巧之烧写SPI Flash存储芯片
- Jlink使用技巧之虚拟串口功能
- Jlink使用技巧之读取STM32内部的程序
- Jlink使用技巧之单独下载HEX文件到单片机
- Jlink使用技巧之J-Scope虚拟示波器功能
- 百度智能手环方案开源(含源码,原理图,APP,通信协议等)
- 如何在Keil-MDK开发环境生成Bin格式文件
- elf格式转换为hex格式文件的两种方法
- 个人博客添加网易云音乐Flash插件
- 两行代码搞定博客访问量统计
欢迎大家关注我的个人博客
或微信扫码关注我的公众号

Jlink使用技巧之虚拟串口功能的更多相关文章
- Jlink使用技巧之J-Scope虚拟示波器功能
J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器.简单地说,是给一个JTAG协议转换盒.其连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议. ...
- Jlink使用技巧之读取STM32内部的程序
前言 上一篇Jlink系列文章介绍了如何使用J-Flash来下载Hex或Bin文件到单片机,具体可参考Jlink使用技巧之单独下载HEX文件到单片机,本篇文章介绍,如何使用JFlash来读取单片机的程 ...
- Jlink使用技巧之单独下载HEX文件到单片机
前言 上一篇文章介绍了使用Keil下载单独的Hex文件到单片机内,本篇文章介绍,如何使用SEGGER官方软件JFlash来进行程序的下载,支持Hex和Bin文件. JFlash的下载和安装 首先,安装 ...
- Jlink使用技巧之合并烧写文件
前言 IAP(In-application-programming),即在应用中编程.当产品发布之后,可以通过网络方便的升级固件程序,而不需要拆机下载程序.IAP系统的固件一般由两部分组成,即Boot ...
- Jlink使用技巧之烧写SPI Flash存储芯片
前言 大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多,本篇文章将介绍如何使用JLink来烧写或者读取SPI Flash存储器, ...
- Jlink使用技巧系列教程索引
近两个月,写写停停,总算完成了这个系列的教程,不容易啊! Jlink使用技巧系列文章: 以下是各文章的链接,直接点击即可进入阅读. Jlink使用技巧之合并烧写文件 Jlink使用技巧之烧写SPI F ...
- STM32 USB虚拟串口(转)
源:STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片 ...
- STM32 USB虚拟串口
串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...
- Windows系统添加虚拟串口及CanToolApp功能1的实现
项目开始尝试用com0com添加虚拟串口,但是遇到了问题,系统中可以看到添加的虚拟串口,但是用C#无法获取串口.经过多次尝试后,决定换用Virtual Serial Port Driver添加虚拟串口 ...
随机推荐
- (后端)sql server 按时间段查询
百度的资料,保存下来: 在写按时间段查询的sql语句的时候 一般我们会这么写查询条件: where date>='2010-01-01' and date<='2010-10-1'. 但是 ...
- OneAlert 携手 BearyChat(倍洽)快速构建 IT 运维 on-call 机制
OneAlert 是北京蓝海讯通科技股份有限公司旗下产品,中国第⼀个 SaaS 模式的免费的云告警平台,集成国内外主流监控/⽀撑系统,实现⼀个平台上集中处理所有 IT 事件,提升 IT 可靠性.并且能 ...
- webAPi OData的使用
一.OData介绍 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准. 二.OData 在asp.net mvc中的用法 ...
- SMBus与I2C的差别
The I²C bus and the SMBus are popular 2-wire buses that areessentially compatible with each other. - ...
- python基础 - 元组操作
元组 tuple 元组是不可变对象. 元组初始化 t = tuple() t = () t = tuple(range(1,7,2)) t = (1,2,3,4,5,1) t = (1,) t = ( ...
- matplotlib numpy scipy 的安装
一:windows 端的安装 #cmd指令 python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sym ...
- scanf函数(初学者)
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. 1.scanf函数的一般形式:scanf函数是一个标准的库函数,它的函数原型在头文件“stdio.h”中,与pr ...
- IE8以下兼容
<!--[if lt IE 9]><script type="text/javascript">alert('IE版本太低,请升级后使用');</sc ...
- C#的static
1.static意思是静态,可以修饰类.字段.属性.方法2.标记为static的就不用创建实例对象调用了,可以通过类名直接点出来3.static三种用法:4.用于变量前,表示每次重新使用该变量所在方法 ...
- centos7下安装docker(13docker存储)
Docker为容器提供了两种存放数据的资源: 1.storage driver管理的镜像层和容器层 2.Data volume Storage driver 之前我们学习镜像的时候知道镜像的分层结构: ...