利用jlink實現串列埠除錯
阿新 • • 發佈:2019-01-03
方法是stm32官網的,我只是一個搬運工
可能很多朋友和我一樣買的最小系統板子,很多外設沒有,比如說usb轉串列埠的晶片,只有jlink下載器,大過年的想買也買不到,在這裡搬運一種方法。
首先是硬體部分,只需要把jlink模擬器插上就ok,就像平時做硬體除錯一樣,不需要別的東西
下一步是mdk裡面關於硬體部分的設定,如圖所示,只需要更改下圖的部分就Ok,別的不用管。
接下來附上一段程式碼,將這段程式碼新增到檔案中,最好是main函式或者是原本用於uart列印顯示的函式部分。
#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);
}
原理類似於uart裡面printf的重定向,前者是定向到uart埠,在這裡是定義到了sw埠的port0,最後效果如下,在view裡面開啟debug(printf) viewer即可以看到,這樣我們就省去了uart的部分,如果uart僅用來除錯的話完全可以採用這樣簡便的方法來實現。