stm32 打印調試的時候,大部分使用硬件串口進行打印輸出。但是近期一個項目中遇到一個問題。就是串口已經都被佔用了。沒有其他的串口進行打印輸出了。對解決問題產生了很大的干擾。基於這個問題,我想了好多辦法。最後發現在MDK 軟件裏面,可以使用調試接口,進行打印輸出。省了一個串口。但是從網站都可以搜到JLINK 的方法,但是一旦用到stlink 的swd 模式的時候,就完蛋了。怎麼配置都出不來打印。原因很簡單:swd 模式是四個管腳:VCC GND SWDIO SWCLK 想要實現軟件內打印,還需要接 SWO (即是 stm32 的PB3 TDO )管腳。配置跟下面一樣,注意:不同單片機不同的core 頻率,就可以了。
操作辦法,直接上圖:
1、找到軟件的魔術棒
2、軟件設置順序
3.1、第一種:需要自己將下面代碼拷貝到軟件源代碼中
#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 needed */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
if (DEMCR & TRCENA) {
while (ITM_Port32(0) == 0);
ITM_Port8(0) = ch;
}
return(ch);
}
3.2、第二種:可以使用mdk 的內部管理軟件來添加調試功能,如下圖:
點擊完成之後,會看到如下界面:
這樣操作完,點擊保存就可以了。
4、打開調試界面,操作步驟
5、按照上面,全速運行之後,在終端頁面就可以看到打印數據。