JTAG介面中,有個SWO引腳,一直沒有在意,也沒有去研究過是干嘛用的,直到發現ST-LINK V2-1上也有個SWO引腳,于是去研究學習它的作用,用起來相比UART方得便多,

本文內容已經整理成PDF,提供給大家下載:
https://pan.baidu.com/s/1EhJulPbD6Cp5OohzpQY0Fg&shfl=sharepset 提取碼:h43c
1 寫在前面
SWO:Serial Wire Output,串行線輸出
SWV:Serial Wire Viewer,串行線查看器
ITM:Instrumentation Trace Macrocell,儀器跟蹤宏單元
在Cortex-M3\M4\M7系列MCU中,內核的除錯組件有一個儀器跟蹤宏單元(ITM),ITM的主要用途是除錯資訊的輸出(例如printf格式輸出),
SWO是單引腳、異步串行通信,可在Cortex-M3\M4\M7內核的MCU使用,由除錯器探測支持,利用MCU內核中ITM模塊實作,
對于STM32,Cortex-M3\M4\M7內核的MCU都有SWO引腳,Cortex-M0內核的MCU沒有此功能,例如STM32F0、STM32L0等,
2 硬體平臺
將ST-LINK V2-1與核心板連接,SWO引腳連接到PB3,

如果核心板/開發板為JTAG介面,則可以這樣接,JTAG介面中的SWO引腳實際上就是PB3引腳,

查看STM32F103的資料手冊,PB3引腳的復用功能為TRACESWO,

3 代碼部分
和UART實作printf列印輸出類似,UART是重定向printf到UART,而這里是重定向到ITM,只需這兩行代碼就能實作SWO輸出,不像UART一樣還要撰寫UART驅動,(此函BSP_SWO.c檔案中)

其中的ITM_SendChar函式位于core_cm3.h(或cm4 cm7)中,直接呼叫即可,

4 Keil SWO輸出配置
4.1 打開Keil工程,進行如圖所示的配置,

4.2 把Use MicroLIB勾上,

4.3 配置完成后,先編譯通過,然后進入除錯模式,

4.4 打開Debug (printf) Viewer視窗,

4.5 點全速運行,就可以看到MCU通過ST-LINK V2-1向編譯器輸出列印資訊了,當然,單步除錯也是可以的,

4.6 提供兩份配置好的、完整的例程,供大家參考學習,要在您的工程中使用SWO除錯,只需將BSP_SWO.c和BSP_SWO.h這個兩個檔案添加到工程中即可,

5 STM32 ST-LINK Utility SWO輸出配置
5.1 運行STM32 ST-LINK Utility,進行如圖所示的配置,點擊Start就可以了,

5.2 使用Keil下載程式之前,需要斷開與STM32 ST-LINK Utility的連接,

否則不能下載,提示連接錯誤,

6 寫在后面
列印資訊用串口也可以做到,SWO的優勢是什么?
1. 串口是MCU的片內外設,占用一個外設資源,而SWO不占用外設
2. 使用不同的MCU需要重新撰寫串口的驅動,而SWO不需要寫驅動
3. 串口輸出一般使用中斷方式發送,除錯時可能需要在中斷中觀察某些資訊,這樣中斷嵌套就容易出現問題,而SWO沒有中斷問題
4. SWO的速度比串口快得多,在時序要求較高的情況下對代碼的影響較小,發送相同的字串,SWO的速度是串口的8.7倍,


雖然SWO不能像串口那樣雙向傳輸,而我們用串口除錯很多時候也只是使用TX輸出而已,這樣看來,SWO引腳用更好的方式替代了串口的TX引腳,
7 聯系我們
如果您在學習SWO除錯時遇到了什么問題,淘寶店鋪搜索《萬般電子》,通過旺旺聯系我們,我們將盡心盡力為您解答、解決,

本檔案由萬般電子撰寫,著作權所有,僅供個人學習使用,未經許可不得用于其它任何用途,否則追究相應責任,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3822.html
標籤:其他
