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