1. 程式人生 > >STM32 JTAG引腳複用設定

STM32 JTAG引腳複用設定

前奏

先來copy下 JTAG、SW介面的定義,
JTAG:JTAG(Joint Test Action Group;聯合測試工作組)是一種國際標準測試協議,主要用於晶片內部測試。現在多數的高階器件都支援JTAG協議,如DSP、FPGA器件等。標準的JTAG介面是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、資料輸入和資料輸出線。

SWD:SW(Serial Wire Mode Interface),序列介面線模式。在序列線模式,只有針TCLK和TMS使用。TDO資料輸出引腳是一個可選。

SWD下載除錯 原理圖:
我的板子原理圖
從圖中看到:板子使用SWD介面下載除錯,即使用SWDIO、SWCLK(PA13、PA14);PB3–JTDO 預設功能為JTAG的,而這裡用作其他的功能–普通I/O。

激情

問題來了:
1、需要關掉PB3的JTAG功能,複用為其他功能。
2、SWD 和傳統的除錯方式區別。

stm32 JTAG複用相關方法 :
直接上程式碼,如下:

  ........
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  //改變指定管腳的對映  GPIO_Remap_SWJ_JTAGDisable  JTAG-DP 失能 + SW-DP使能
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
  ...
....

但,
當設定了以上語句後,當運行了這兩個語句後,JTAG模擬就與目標失去去聯絡。
解決辦法有:
1、設定啟動模式為ISP模式(BOOT0=1、BOOT1=0)或設定啟動模式為RAM執行模式(BOOT0=1、BOOT1=1)。 將開發板斷電後重新上電,此時就因不是在使用者程式模式,因此就不會執行禁用JTAG的語句,JTAG功能也就可以正常使用。
2、設定啟動模式為ISP模式(BOOT0=1、BOOT1=0),用ISP程式將STM32的FLASH擦除,之後就可恢復JTAG功能。
3、如果你的模擬器支援SWD模擬模式,如IAR下用JLINK、MDK下用ULINK2。 直接將模擬器的模式設為SWD模,就可以不受這個禁止JTAG功能的影響了。

我的環境切合第三個解決方案,IAR設定如下:
連結介面設定為:SWD

SWD 和傳統的除錯方式區別 :

  1. SWD 模式比 JTAG 在高速模式下面更加可靠。 在大資料量的情況下面 JTAG 下載程式會失敗, 但是 SWD 發生的機率會小很多。基本使用 JTAG 模擬模式的情況下是可以直接使用 SWD 模式的, 只要你的模擬器支援。 所以推薦大家使用這個模式。
  2. 在大家 GPIO 剛好缺一個的時候, 可以使用 SWD 模擬, 這種模式支援更少的引腳。
  3. 在大家板子的體積有限的時候推薦使用 SWD 模式, 它需要的引腳少, 當然需要的 PCB 空間就小啦! 比如你可以選擇一個很小的 2.54 間距的 5 芯端子做模擬介面。

然後

以上,
散啦。。。。。。