昨天除錯一塊stm32l151的板子,用的是jlinkob,除錯時,出現下面的錯誤:
這個錯誤出現的原因是,程式中有修改jtag埠(pa13,pa14)的語句,當把jtag當做普通io口時,jlink就不能返**試資訊,jlink就讀不回相應暫存器的值了。
rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_afio, enable);
gpio_pinremapconfig(gpio_remap_swj_disable, enable); //完全失能jtag/swd
解決思路:我們剛才既然把「錯誤」的程式寫入了使用者flash,那麼我們就用「正確」的程式去覆蓋之間的程式。
解決方法:
還有關於jtag引腳需不需要上下拉電阻的問題,由於jtag口是和gpio口復用的,gpio模組是整合了上下拉電阻的,那麼jtag也是同樣有著內部上下拉,復位時的上下拉情況如下:
● jntrst: internalpull-up
● jtdi: internal pull-up
● jtms/swdio: internalpull-up
● tck/swclk: internalpull-down
對於有些偵錯程式省去了rst引腳,21ic論壇的香水城版主是這樣說的:
偵錯程式拉乙個訊號控制目標mcu的復位引腳是個推薦的做法。拋開偵錯程式不說,通常上位機和下位機之間除了資料通訊之外,最好能夠直接控制下位機復位,在出錯或異常時進行直接控制。回到偵錯程式來說,比如目標mcu上電就進入了低功耗或關閉了jtag引腳,那麼我的偵錯程式在連線的時候,先把目標mcu復位,使得能夠立刻在目標mcu執行起來到進入低功耗模式或關閉jtag引腳之前,控制目標mcu的jtag模組,並將目標mcu halt住。
【reference】
STM32 JTAG腳做普通IO使用的方法
在工程設計的時候,使用了48腳的stm32f103c8t6,引腳數量不夠,導致使用了pb3,pb4,pa15,按標準gpio配置完畢後發現不受控。查詢相關資料發現,這三個腳的功能時jtag功能。用這幾個腳時,需要禁用jtag功能開啟swd功能,並且要對引腳功能進行remap。以pb3為例 其他引腳同...
STM32之JTAG口作為普通IO使用
stm32f10x系列的mcu復位後,pa13 14 15 以及pb3 4預設配置為jtag功能。有時我們為了充分利用mcu i o口的資源,會把這些埠設定為普通i o口。jtag對應io jtms pa13 jtck pa14 jtdi pa15 jtdo pb3 jnrst pb4swd對應io...
都是stm32的JTAG引腳惹的禍
最近在除錯08介面的led顯示屏,使用的是自己做的stm32板子。除錯的時候,突然發現顯示屏,怎麼都不亮,我就開始懷疑人生了。難道是程式問題?吧啦吧啦的查詢時序圖,修改修改,加延時。然而並沒有什麼卵用!唉,都讓我懷疑是不是引腳接錯了,反覆測量後發現引腳確實是對的 難道是硬體問題?我把不需要的程式全部...