OBG在單片機中的解釋
STM32單片機的內核(Cortex-M3)含有硬件調試模塊,支持多種復雜的調試操作,硬件調試模塊允許內核在取地址或者訪(fǎng)問(wèn)數據時(shí)停止-這就是我們在單片機開(kāi)發(fā)和過(guò)程中可以在線(xiàn)仿真的保障。內核在停止時(shí),其內部的狀態(tài)與外部狀態(tài)都是可以進(jìn)行查詢(xún)的,- 在單片機仿真調試中受到中斷,通常為人為設置的斷點(diǎn),此時(shí)單片機中所有的變量,以及程序指針,CP,等地址指針都可以查詢(xún)到狀態(tài)。在調試過(guò)程中,設置了斷點(diǎn),當程序停止運行時(shí),我們可以接著(zhù)進(jìn)行單步執行,跳出函數,進(jìn)入函數等操作。還可以進(jìn)行復位,使寄存器都回歸到初始復位狀態(tài)。
OBG調試接口
串行接口
JTAG調試接口
OBG調試框圖
SWJ(serial wire and JTAG)調試端口
JTAG調試接口(JTAG-DP)為AHP-AP模塊提供5針標準JTAG口串行調試接口(SW-DP)為兩針接口(時(shí)鐘+數據)接口在swj-dp接口中,SW-DP接口的2個(gè)引腳和JTAG標準接口的5個(gè)引腳中的一些是復用的。
SWJ調試端口
JTAG-DP與SW-DP切換的機制 JTAG調試接口是默認的調試接口如果想換到SW-DP,必須在TMS/TCK上輸出一指定的JTAG序列(SWCLK SWDIO),該序列禁止JTAG-DP,并激活SW-DP,該方法只能通過(guò)SWCLK與SWDIO兩個(gè)引腳來(lái)激活。
指定序列是:
輸出超過(guò)50個(gè)SWCLK的周期=1信號
輸出16個(gè)SWDIO信號0111100111100111(MSB)
輸出超過(guò)50個(gè)SWCLK周期的=1信號
注:如果在調試過(guò)程中,使用到了SW-DP模式,可以對SWDIO與SWCLK信號進(jìn)行觀(guān)察,不出意外可以觀(guān)察到上面的信號。
SWJ調試端口腳 注:下圖中的所有引腳在所有STM32系列單片機中都存在SWJ端口對應
在系統復位后(SYSRESETn或PORESETn)以后,屬于SWJ-DP的所有5個(gè)腳都立即被初始化為可被調試器調用的專(zhuān)用引腳。然而STM32控制器可以復用重映射和調試IO配置寄存器(AFIO_MARR)寄存器來(lái)禁止SWJ-DP接口的部分或者全部引腳功能,被釋放為普通IO口,此寄存器被映射到Cortex-M3系統總線(xiàn)的APB橋上,對此寄存器的配置將由用戶(hù)進(jìn)行配置。
注:在單片機開(kāi)發(fā)中基本上以及絕 對不會(huì )用到占用調試接口的情況。大家松口氣JTAG腳上的內部上拉與下拉保證JTAG的輸入引腳不是懸空的是非常必要的,因為他們直接連接到D觸發(fā)器控制著(zhù)調試模式。必須特別注意SWCLK/TCK引腳,因為他們直接連接到一些D觸發(fā)器的時(shí)鐘端。
為了避免任何未受控制的I/O電平, STM32F10xxx在JTAG輸入腳上嵌入了內部上拉和下拉●JINTRST:內部上拉
● JTDI:內部上拉
● JTMS/SWDIO:內部上拉
● TCK/SWCLK:內部下拉
一旦JTAG I/O被用戶(hù)代碼釋放, GPIO控制器再次取得控制。這些I/O口的狀態(tài)將恢復到復位時(shí)的狀態(tài)。
● JNTRST:帶上拉的輸入
● JTDI:帶上拉的輸入
● JTMS/SWDIO:帶上拉的輸入
● JICK/SWCLK:帶下拉的輸入
● JTDO:浮動(dòng)輸入
軟件可以把這些I/O口作為普通的I/O口使用。
注意: JTAG IEEE標準建議對TDI, TMS和nTRST上拉,而對TCK沒(méi)有特別的建議。但在STM32F10xxx中, JTCK引腳帶有下拉。
內嵌的上拉和下拉使芯片不再需要外加外部電阻利用串行接口并釋放不用的調試腳作為普通I/O口為了利用串行調試接口來(lái)釋放一些普通I/O口,用戶(hù)軟件必須在復位后設置SWJ_CFG=010,從而釋放PA15, PB3和PB4用做普通I/O口。這點(diǎn)可以記住因為在平常我也忘記這了。