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