1. 程式人生 > >STM32除錯DEBUG時,需要知道的知識!

STM32除錯DEBUG時,需要知道的知識!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

學習STM32開發,肯定少不了DEBUG除錯這一步驟。那麼,本文帶你瞭解一下這個除錯相關的知識。


本文以STM32F1、Cortex-M3為例,其它系列晶片或核心,原理相同或類似。


1概況

在STM32中,有很多除錯元件。使用它們可以執行各種除錯功能,包括斷點、資料觀察點、 快閃記憶體地址過載以及各種跟蹤


STM32F1使用Cortex-M3核心,該核心內含硬體除錯模組,支援複雜的除錯操作


硬體除錯模組允許核心在取指(指令斷點)或訪問資料(資料斷點)時停止。核心停止時,核心的內部狀態和系統的外部狀態都是可以查詢的。完成查詢後,核心和外設可以被複原,程式將繼續執行。


當STM32F10x微控制器連線到偵錯程式並開始除錯時,偵錯程式將使用核心的硬體除錯模組進行除錯操作。


2

除錯框圖

STM32F1和Cortex-M3的除錯框圖:

640?wx_fmt=png


提示:Cortex-M3核心內含的硬體除錯模組是ARM CoreSight開發工具集的子集。


ARM Cortex-M3核心提供整合的片上除錯功能。它由以下部分組成:

  • SWJ-DP:序列/JTAG除錯埠

  • AHP-AP: AHB訪問埠

  • ITM:執行跟蹤單元

  • FPB:快閃記憶體指令斷點

  • DWT:資料觸發

  • TPUI:跟蹤單元介面(僅較大封裝的晶片支援)

  • ETM:嵌入式跟蹤微單元(在較大的封裝上才有支援此功能的引腳),專用於STM32F1的除錯特性

  • 靈活的除錯引腳分配

  • MCU除錯盒(支援低電源模式,控制外設時鐘等)


3

除錯介面

STM32支援兩種除錯介面:

  • 序列介面

  • JTAG除錯介面


STM32的5個普通I/O口可用作SWJ-DP(序列/JTAG除錯)介面引腳:

640?wx_fmt=png


4

SWJ除錯埠(serial wire and JTAG)

STM32核心集成了序列/JTAG除錯介面(SWJ-DP)。這是標準的ARM CoreSight除錯介面,包括JTAG-DP介面(5個引腳)和SW-DP介面(2個引腳)。


1.JTAG除錯介面(JTAG-DP)為AHP-AP模組提供5針標準JTAG介面。


2. 序列除錯介面(SW-DP)為AHP-AP模組提供2針(時鐘+資料)介面。


在SWJ-DP介面中, SW-DP介面的2個引腳和JTAG介面的5個引腳中的一些是複用的。


SWJ除錯埠:

640?wx_fmt=png

上面的圖顯示非同步跟蹤輸出腳(TRACESWO)和TDO是複用的。因此非同步跟蹤功能只能在SWDP除錯介面上實現,不能在JTAG-DP除錯介面上實現。


JTAG-DP和SW-DP切換的機制

JTAG除錯介面是預設的除錯介面。如果偵錯程式想要切換到SW-DP,必須在TMS/TCK上輸出一指定的JTAG序列(分別對映到SWDIO和SWCLK),該序列禁止JTAG-DP,並激活SW-DP。該方法可以只通過SWCLK和SWDIO兩個引腳來啟用SW-DP介面。


指定的序列是:

1. 輸出超過50個TCK週期的TMS(SWDIO)= 1訊號


2. 輸出16個TMS(SWDIO)訊號 0111100111100111 (MSB)


3. 輸出超過50個TCK週期的TMS(SWDIO)= 1訊號


5

JTAG腳上的內部上拉和下拉

保證JTAG的輸入引腳不是懸空的非常必要,因為他們直接連線到D觸發器控制著除錯模式。必須特別注意SWCLK/TCK引腳,因為他們直接連線到一些D觸發器的時鐘端。


為了避免任何未受控制的I/O電平, STM32在JTAG輸入腳上嵌入了內部上拉和下拉。

  • JINTRST:內部上拉

  • JTDI:內部上拉

  • JTMS/SWDIO:內部上拉

  • TCK/SWCLK:內部下拉


一旦JTAG I/O被使用者程式碼釋放, GPIO控制器再次取得控制。這些I/O口的狀態將恢復到復位時的狀態。

  • JNTRST:帶上拉的輸入

  • JTDI:帶上拉的輸入

  • JTMS/SWDIO:帶上拉的輸入

  • JICK/SWCLK:帶下拉的輸入

  • JTDO:浮動輸入


軟體可以把這些I/O口作為普通的I/O口使用。


6

利用序列介面並釋放不用的除錯腳作為普通I/O口

為了利用序列除錯介面來釋放一些普通I/O口,使用者軟體必須在復位後設置SWJ_CFG=010,從而釋放PA15, PB3和PB4用做普通I/O口。


在除錯時,偵錯程式進行以下操作:

  • 在系統復位時,所有SWJ引腳被分配為專用引腳(JTAG-DP + SW-DP)。

  • 在系統復位狀態下,偵錯程式傳送指定JTAG序列,從JTAG-DP切換到SW-DP。

  • 仍然在系統復位狀態下,偵錯程式在復位地址處設定斷點

  • 釋放復位訊號,核心停止在復位地址處。

  • 從這裡開始,所有的除錯通訊將使用SW-DP介面,其他JTAG引腳可以由使用者程式碼改配為普通I/O口。


提示:這個地方就是需要大家配置相關的引腳。


7

參看文獻

1.Cortex-M3(r1p1版)技術參考手冊(TRM)


2.ARM除錯介面V5


3.ARM CoreSight 開發工具集(r1p0版)技術參考手冊


說明:本文參考《STM32F1參考手冊》和《CM3技術手冊》。

640?

1.2018年第11期《微控制器與嵌入式系統應用》電子刊新鮮出爐!

2.翻臉如翻書!聯電宣佈暫停與晉華合作

3.對於邊緣計算,其實嵌入式系統一點兒都不陌生!

4.邊緣計算對嵌入式系統實現物聯網應用的影響,究竟有多大?

5.你的應用適合選擇哪個Linux版本?這裡有答案。。。

6.在北京當 Python 程式設計師,能買起房嗎?

640?wx_fmt=gif

本文來自個人微信公眾號「ID:strongerHuang」,經原作者授權釋出。原文公眾號由嵌入式工程師「strongerHuang」在精心整理並維護。專注分享的內容包含:Keil、IAR、STM8、STM32、μC/OS、FreeRTOS、CANOpen、ModBus...