1. 程式人生 > >利用jlink實現串列埠除錯

利用jlink實現串列埠除錯

方法是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僅用來除錯的話完全可以採用這樣簡便的方法來實現。