Jlink使用技巧之虚拟串口功能

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

前言

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

ITM简介

img_533afce4061801e558a2fce3bc4a5346.jpe

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
AI 代码解读

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);
}
AI 代码解读

以上两段代码可以添加在usart.c文件中,如果文件中已经有了重定向printf的代码,要屏蔽掉,只保留一个重定向。

3.在应用程序中添加调试信息

在程序中添加需要输出的调试信息:

printf("电子电路开发学习:mcu149, Test: %.1f \r\n" ,test += 0.1);
AI 代码解读

4.设置ITM端口0以使能调试功能

在进行调试之前要先使能ITM调试功能,具体配置如下图所示:

img_62f65b0354d2cb5194346ee46fa72004.jpe

5.确认硬件的连接方式。

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

img_ed9368139bc90e24522ca33fef671aac.jpe

6.打开Debug(printf)窗口

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

img_caf35d5c9c60de4beba45d2e440e04a7.jpe

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

img_6883baa4d7032945d60ca81f6cdfdeee.jpe

参考资料:

Debug (printf) Viewer


JLink_Windows_V614b软件下载链接:JLink_Windows_V614b.exe


历史精选文章:


欢迎大家关注我的个人博客

或微信扫码关注我的公众号

img_954cd7422a2def047d3f713ee25a28c1.jpe

目录
相关文章
VSPD虚拟串口软件安装及使用
VSPD虚拟串口软件安装及使用
1385 0
交叉编译valgrind在嵌入式设备上调试程序
交叉编译valgrind在嵌入式设备上调试程序
|
12月前
|
OpenOCD(一):什么是OpenOCD&调试适配器硬件
OpenOCD(一):什么是OpenOCD&调试适配器硬件
768 0
手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
516 0
手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
gdbserver远程调试嵌入式linux应用程序方法
此处所讲的是基于gdb和gdbsever的远程调试方法。环境为:PC机:win7、虚拟机:10.04、下位机:飞嵌TE2440开发板。   嵌入式linux应用程序的开发一般都是在linux里面编写好代码,并用交叉编译器arm-linux-gcc编译好之后再下载到板子上运行。
1384 0
嵌入式Linux USB WIFI驱动的移植
硬件平台:飞思卡尔MX258开发板 操作系统:Linux2.6.31 WIFI:    RT2860 USB WIFI模组 交叉编译环境:gcc version 4.1.2   调试步骤: 第一步:测试USB HOST接口 在menuconfig中将USB HOST设置为内核模式: ...
1734 0
使用串口下载vxworks映象的方法
<p><strong><span style="color:black">使用串口下载</span><span style="color:black"><span style="font-family:Times New Roman">vxworks</span></span><span style="color:black">映象的方法</span></strong><span styl
1949 0
JLINK与JTAG的区别
<p style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"> <span style="font-family:宋体; font-size:16px">   调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种。当仿真时,IAR、KEIL、ADS等都有一个公共的调试接口,
1587 0
WinCE虚拟串口驱动(一)
 //========================================================================  //TITLE:  //    WinCE虚拟串口驱动(一)  //AUTHOR:  //   ...
729 0

热门文章

最新文章