STM32 JTAG失效恢復

2022-08-05 15:03:17 字數 1184 閱讀 3509

昨天除錯一塊stm32l151的板子,用的是jlinkob,除錯時,出現下面的錯誤:

jlink error:could not start cpu core.

jlink warning:cpu could not be halted

這個錯誤出現的原因是,程式中有修改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 PWM

脈衝寬度調製是利用微處理器的數字輸出來對類比電路進行控制的一種非常有效的技術 高階定時器可以同時產生多達7路的pwm輸出 而通用定時器也能同...

DMA(STM32)

1 dma data memory access 實際的記憶體儲存 注 dma幹活的時候是不需要cpu干涉的 2 記憶體 定義的變數 外設...

stm32 GPIO

gpio 簡介 通用輸入輸出介面gpio是嵌入式系統 微控制器開發過程中最常用的介面,使用者可以通過程式設計靈活的對介面進行控制,實現對電路板上led 數碼管 按鍵等常用裝置控制驅動,也可以用作串列埠的資料收發管腳,或者ad的介面等複用功能使用。因此其作用和功能非常重要。 gpio的工作模式 四種輸入 四種輸...