0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談STM32調(diào)試DEBUG相關(guān)知識(shí)

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-06 15:23 ? 次閱讀

學(xué)習(xí)STM32開(kāi)發(fā),肯定少不了DEBUG調(diào)試這一步驟。那么,本文帶你了解一下這個(gè)調(diào)試相關(guān)的知識(shí)。

本文以STM32F1、Cortex-M3為例,其它系列芯片或內(nèi)核,原理相同或類似。

1概況

在STM32中,有很多調(diào)試組件。使用它們可以執(zhí)行各種調(diào)試功能,包括斷點(diǎn)、數(shù)據(jù)觀察點(diǎn)、 閃存地址重載以及各種跟蹤。

STM32F1使用Cortex-M3內(nèi)核,該內(nèi)核內(nèi)含硬件調(diào)試模塊,支持復(fù)雜的調(diào)試操作。

硬件調(diào)試模塊允許內(nèi)核在取指(指令斷點(diǎn))或訪問(wèn)數(shù)據(jù)(數(shù)據(jù)斷點(diǎn))時(shí)停止。內(nèi)核停止時(shí),內(nèi)核的內(nèi)部狀態(tài)和系統(tǒng)的外部狀態(tài)都是可以查詢的。完成查詢后,內(nèi)核和外設(shè)可以被復(fù)原,程序?qū)⒗^續(xù)執(zhí)行。

當(dāng)STM32F10x微控制器連接到調(diào)試器并開(kāi)始調(diào)試時(shí),調(diào)試器將使用內(nèi)核的硬件調(diào)試模塊進(jìn)行調(diào)試操作。

2

調(diào)試框圖

STM32F1和Cortex-M3的調(diào)試框圖:

提示:Cortex-M3內(nèi)核內(nèi)含的硬件調(diào)試模塊是ARM CoreSight開(kāi)發(fā)工具集的子集。

ARM Cortex-M3內(nèi)核提供集成的片上調(diào)試功能。它由以下部分組成:

SWJ-DP:串行/JTAG調(diào)試端口

AHP-AP: AHB訪問(wèn)端口

ITM:執(zhí)行跟蹤單元

FPB:閃存指令斷點(diǎn)

DWT:數(shù)據(jù)觸發(fā)

TPUI:跟蹤單元接口(僅較大封裝的芯片支持)

ETM:嵌入式跟蹤微單元(在較大的封裝上才有支持此功能的引腳),專用于STM32F1的調(diào)試特性

靈活的調(diào)試引腳分配

MCU調(diào)試盒(支持低電源模式,控制外設(shè)時(shí)鐘等)

3

調(diào)試接口

STM32支持兩種調(diào)試接口:

串行接口

JTAG調(diào)試接口

STM32的5個(gè)普通I/O口可用作SWJ-DP(串行/JTAG調(diào)試)接口引腳:

4

SWJ調(diào)試端口(serial wire and JTAG)

STM32內(nèi)核集成了串行/JTAG調(diào)試接口(SWJ-DP)。這是標(biāo)準(zhǔn)的ARM CoreSight調(diào)試接口,包括JTAG-DP接口(5個(gè)引腳)和SW-DP接口(2個(gè)引腳)。

1.JTAG調(diào)試接口(JTAG-DP)為AHP-AP模塊提供5針標(biāo)準(zhǔn)JTAG接口。

2. 串行調(diào)試接口(SW-DP)為AHP-AP模塊提供2針(時(shí)鐘+數(shù)據(jù))接口。

在SWJ-DP接口中, SW-DP接口的2個(gè)引腳和JTAG接口的5個(gè)引腳中的一些是復(fù)用的。

SWJ調(diào)試端口:

上面的圖顯示異步跟蹤輸出腳(TRACESWO)和TDO是復(fù)用的。因此異步跟蹤功能只能在SWDP調(diào)試接口上實(shí)現(xiàn),不能在JTAG-DP調(diào)試接口上實(shí)現(xiàn)。

JTAG-DP和SW-DP切換的機(jī)制

JTAG調(diào)試接口是默認(rèn)的調(diào)試接口。如果調(diào)試器想要切換到SW-DP,必須在TMS/TCK上輸出一指定的JTAG序列(分別映射到SWDIO和SWCLK),該序列禁止JTAG-DP,并激活SW-DP。該方法可以只通過(guò)SWCLK和SWDIO兩個(gè)引腳來(lái)激活SW-DP接口。

指定的序列是:

1. 輸出超過(guò)50個(gè)TCK周期的TMS(SWDIO)= 1信號(hào)

2. 輸出16個(gè)TMS(SWDIO)信號(hào) 0111100111100111 (MSB)

3. 輸出超過(guò)50個(gè)TCK周期的TMS(SWDIO)= 1信號(hào)

5

JTAG腳上的內(nèi)部上拉和下拉

保證JTAG的輸入引腳不是懸空的是非常必要的,因?yàn)樗麄冎苯舆B接到D觸發(fā)器控制著調(diào)試模式。必須特別注意SWCLK/TCK引腳,因?yàn)樗麄冎苯舆B接到一些D觸發(fā)器的時(shí)鐘端。

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

JINTRST:內(nèi)部上拉

JTDI:內(nèi)部上拉

JTMS/SWDIO:內(nèi)部上拉

TCK/SWCLK:內(nèi)部下拉

一旦JTAG I/O被用戶代碼釋放, GPIO控制器再次取得控制。這些I/O口的狀態(tài)將恢復(fù)到復(fù)位時(shí)的狀態(tài)。

JNTRST:帶上拉的輸入

JTDI:帶上拉的輸入

JTMS/SWDIO:帶上拉的輸入

JICK/SWCLK:帶下拉的輸入

JTDO:浮動(dòng)輸入

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

6

利用串行接口并釋放不用的調(diào)試腳作為普通I/O口

為了利用串行調(diào)試接口來(lái)釋放一些普通I/O口,用戶軟件必須在復(fù)位后設(shè)置SWJ_CFG=010,從而釋放PA15, PB3和PB4用做普通I/O口。

在調(diào)試時(shí),調(diào)試器進(jìn)行以下操作:

在系統(tǒng)復(fù)位時(shí),所有SWJ引腳被分配為專用引腳(JTAG-DP + SW-DP)。

在系統(tǒng)復(fù)位狀態(tài)下,調(diào)試器發(fā)送指定JTAG序列,從JTAG-DP切換到SW-DP。

仍然在系統(tǒng)復(fù)位狀態(tài)下,調(diào)試器在復(fù)位地址處設(shè)置斷點(diǎn)

釋放復(fù)位信號(hào),內(nèi)核停止在復(fù)位地址處。

從這里開(kāi)始,所有的調(diào)試通信將使用SW-DP接口,其他JTAG引腳可以由用戶代碼改配為普通I/O口。


提示:這個(gè)地方就是需要大家配置相關(guān)的引腳。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16802

    瀏覽量

    349371
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353786
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    89

    瀏覽量

    19808
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32用Embedded軟件debug在線調(diào)試失敗的原因?

    請(qǐng)問(wèn)GD32用Embedded軟件debug在線調(diào)試失敗可能是什么原因?
    發(fā)表于 09-27 07:13

    開(kāi)發(fā)攻略之STM32調(diào)試端口的映射

    最近有一個(gè)項(xiàng)目用到了STM32F103RB系列單片機(jī),由于引腳數(shù)量較少,不得不使用到了單片機(jī)的PB3和PB4兩個(gè)引腳。而這兩個(gè)引腳剛好又是STM32系列的JTAG調(diào)試引腳,如果要用于普通IO的功能
    的頭像 發(fā)表于 08-03 08:11 ?294次閱讀
    開(kāi)發(fā)攻略之<b class='flag-5'>STM32</b><b class='flag-5'>調(diào)試</b>端口的映射

    在IAR 7.3調(diào)試STM32 usb只要配置USB的中斷NVIC_Init,在debug的時(shí)就停止不了內(nèi)核,也復(fù)位不了的原因?

    在IAR 7.3調(diào)試STM32 usb 只要配置USB的中斷NVIC_Init,在debug的時(shí)就停止不了內(nèi)核,也復(fù)位不了。用的是STLINKV1V2 也是一樣 是不是在配置NVIC寄存器的時(shí)候 影響到了
    發(fā)表于 05-16 06:51

    單片機(jī)開(kāi)發(fā)環(huán)境中Release與Debug模式的對(duì)比分析

    Debug通常稱為調(diào)試版本。通過(guò)一系列編譯選項(xiàng)的配合,編譯的結(jié)果通常包含調(diào)試信息,而且不希望做優(yōu)化,便于程序員調(diào)試程序。
    發(fā)表于 04-30 11:22 ?944次閱讀
    單片機(jī)開(kāi)發(fā)環(huán)境中Release與<b class='flag-5'>Debug</b>模式的對(duì)比分析

    請(qǐng)問(wèn)STM32CubeMonitor不能在debug時(shí)使用嗎?

    STM32CubeMonitor是不是不能在debug時(shí)使用?
    發(fā)表于 04-10 06:59

    STM32F769無(wú)法debug的原因?

    我最近在調(diào)試 STM32F769 使用RT Thread 系統(tǒng) 開(kāi)始移植已經(jīng)成功 結(jié)果前幾天出了問(wèn)題 現(xiàn)在無(wú)法debugdebug 連接 提示 端口號(hào)無(wú)效GDB 端口當(dāng)時(shí)是
    發(fā)表于 04-08 07:31

    L412K8U6調(diào)試Debug時(shí)進(jìn)不去主函數(shù)是怎么回事?

    L412K8U6調(diào)試Debug時(shí)進(jìn)不去主函數(shù),同一個(gè)程序用STM32L412 nucleo板就可以正常調(diào)試
    發(fā)表于 04-02 06:06

    STM32CubeMX創(chuàng)建STM32U5系列工程,DEBUG調(diào)試下為什么沒(méi)有ST-LINK選項(xiàng)?

    通過(guò)STM32CubeMx創(chuàng)建生成一個(gè)STM32U5xxx 的MDK(keil_v5)工程,打開(kāi)工程后,想通過(guò)ST-LINK進(jìn)行調(diào)試,但在工程的Debug窗口并沒(méi)有ST-LINK
    發(fā)表于 03-27 06:40

    母線保護(hù)相關(guān)知識(shí)分享

    母線保護(hù)相關(guān)知識(shí)分享
    的頭像 發(fā)表于 01-19 10:29 ?456次閱讀
    母線保護(hù)<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>分享

    詳解Java DEBUG的基本原理

    Debug 的時(shí)候,都遇到過(guò)手速太快,直接跳過(guò)了自己想調(diào)試的方法、代碼的時(shí)候吧……
    的頭像 發(fā)表于 01-05 10:10 ?1236次閱讀
    詳解Java <b class='flag-5'>DEBUG</b>的基本原理

    STM32 TrustZone 開(kāi)發(fā)調(diào)試技巧

    電子發(fā)燒友網(wǎng)站提供《STM32 TrustZone 開(kāi)發(fā)調(diào)試技巧.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 11:16 ?2次下載
    <b class='flag-5'>STM32</b> TrustZone 開(kāi)發(fā)<b class='flag-5'>調(diào)試</b>技巧

    單片機(jī)程序調(diào)試常見(jiàn)問(wèn)題 STM32單片機(jī)一般有幾種調(diào)試方式

    SWD是STM32單片機(jī)常用的調(diào)試模式之一。它通過(guò)單一的調(diào)試引腳(SWDIO)和時(shí)鐘引腳(SWCLK)來(lái)進(jìn)行調(diào)試和編程操作。使用SWD調(diào)試
    的頭像 發(fā)表于 12-02 17:14 ?3240次閱讀

    STM32WB55開(kāi)發(fā)(4)----配置串口打印Debug調(diào)試信息

    STM32WB55系列微控制器上進(jìn)行開(kāi)發(fā)時(shí),實(shí)時(shí)監(jiān)控應(yīng)用程序的運(yùn)行情況和調(diào)試潛在問(wèn)題是至關(guān)重要的。使用串口(USART/UART)進(jìn)行Debug信息打印是一種簡(jiǎn)便、高效的方法。下面是如何在S
    的頭像 發(fā)表于 12-01 15:48 ?1099次閱讀
    <b class='flag-5'>STM32</b>WB55開(kāi)發(fā)(4)----配置串口打印<b class='flag-5'>Debug</b><b class='flag-5'>調(diào)試</b>信息

    在keil調(diào)試延時(shí),除了debug還有別的辦法嗎?

    在keil調(diào)試延時(shí),除了debug,還有別的辦法嗎,還有0.0000001s等于一微妙嗎?
    發(fā)表于 11-03 07:02

    STM32串口通信簡(jiǎn)明知識(shí)

    STM32串口通信簡(jiǎn)明知識(shí)
    的頭像 發(fā)表于 10-25 15:48 ?1219次閱讀
    <b class='flag-5'>STM32</b>串口通信簡(jiǎn)明<b class='flag-5'>知識(shí)</b>