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調試時遇到了什么問題,淘寶店鋪搜索《萬般電子》,通過旺旺聯系我們,我們將盡心盡力為您解答、解決。
本文檔由萬般電子編寫,版權所有。僅供個人學習使用,未經許可不得用於其它任何用途,否則追究相應責任。