先來copy下 JTAG、SW接口的定義
JTAG:JTAG(JointTest Action Group;聯(lián)合測試工作組)是一種國際標準測試協(xié)議,主要用于芯片內部測試?,F(xiàn)在多數(shù)的高級器件都支持JTAG協(xié)議,如DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。
SWD:SW(Serial Wire Mode Interface),串行接口線模式。在串行線模式,只有針TCLK和TMS使用。TDO數(shù)據(jù)輸出引腳是一個可選。
SWD下載調試 原理圖:
從圖中看到:板子使用SWD接口下載調試,即使用SWDIO、SWCLK(PA13、PA14);PB3–JTDO 默認功能為JTAG的,而這里用作其他的功能–普通I/O。
問題來了:
1、需要關掉PB3的JTAG功能,復用為其他功能。
2、SWD 和傳統(tǒng)的調試方式區(qū)別。
STM32JTAG復用相關方法 :
直接上代碼,如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//改變指定管腳的映射GPIO_Remap_SWJ_JTAGDisableJTAG-DP失能+SW-DP使能GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);。..。...12345
但,當設置了以上語句后,當運行了這兩個語句后,JTAG仿真就與目標失去去聯(lián)系。
解決辦法有:
1、設置啟動模式為ISP模式(BOOT0=1、BOOT1=0)或設置啟動模式為RAM運行模式(BOOT0=1、BOOT1=1)。 將開發(fā)板斷電后重新上電,此時就因不是在用戶程序模式,因此就不會執(zhí)行禁用JTAG的語句,JTAG功能也就可以正常使用。
2、設置啟動模式為ISP模式(BOOT0=1、BOOT1=0),用ISP程序將STM32的FLASH擦除,之后就可恢復JTAG功能。
3、如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。 直接將仿真器的模式設為SWD模,就可以不受這個禁止JTAG功能的影響了。
我的環(huán)境切合第三個解決方案,IAR設置如下:
SWD 和傳統(tǒng)的調試方式區(qū)別 :
SWD 模式比 JTAG 在高速模式下面更加可靠。 在大數(shù)據(jù)量的情況下面 JTAG 下載程序會失敗, 但是 SWD 發(fā)生的幾率會小很多。基本使用 JTAG 仿真模式的情況下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推薦大家使用這個模式。
在大家 GPIO 剛好缺一個的時候, 可以使用 SWD 仿真, 這種模式支持更少的引腳。
在大家板子的體積有限的時候推薦使用 SWD 模式, 它需要的引腳少, 當然需要的 PCB 空間就小啦! 比如你可以選擇一個很小的 2.54 間距的 5 芯端子做仿真接口。