mdk 軟件內調試 debug (printf) JLINK 與SWD 調試的不同

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、按照上面,全速運行之後,在終端頁面就可以看到打印數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章