1.Target Options -> Debug -> Settings(JLink) -> Debug里ort選擇SW模式
2.在Target Options -> Debug -> Settings(JLink) -> Trace里選擇Enable
3.Core freq設為64MHz(以NRF52832為例)
4. 設置ITM Port的值如下所示

5.在工程中添加.c文件如下
#include "stdio.h"
#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
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);
}
//或者
int fputc(int ch, FILE *f) {
ITM_SendChar(ch);//內聯函數
return(ch);
}
6.用Debug模式運行工程,Debug (printf) Viewer中即可以查看printf的輸出信息。

注意:
1.Core freq頻率需要設置的與板子運行頻率相同
2.ITM可以理解為一個可以提供調試數據結果的MCU內部的東東,他首先是一個硬件存在,在Cortex-M3,M4,M7上都支持(很遺憾,性價比很高的M0,M0+是不支持的)
3.沒有提供SWO管腳,是無法做ITM跟蹤調試的(將內核信息輸出到IDE或者RTT終端)
參考:
https://www.cnblogs.com/GBRgbr/p/4450556.html
https://blog.csdn.net/hanchaoman/article/details/102494914
