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窗口看到串口輸出的信息。

參考資料:

Debug (printf) Viewer


JLink_Windows_V614b軟件下載鏈接:JLink_Windows_V614b.exe


歷史精選文章:


歡迎大家關注我的個人博客

或微信掃碼關注我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM