JTAG接口中,有個SWO引腳,一直沒有在乎,也沒有去研究過是幹嗎用的。直到發現ST-LINK V2-1上也有個SWO引腳,因而去研究學習它的做用,用起來相比UART方得便多。異步
本文內容已經整理成PDF,提供給你們下載:函數
https://pan.baidu.com/s/1EhJulPbD6Cp5OohzpQY0Fg&shfl=sharepset 提取碼:h43c學習
SWO:Serial Wire Output,串行線輸出spa
SWV:Serial Wire Viewer,串行線查看器調試
ITM:Instrumentation Trace Macrocell,儀器跟蹤宏單元blog
在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等。開發
將ST-LINK V2-1與核心板鏈接,SWO引腳鏈接到PB3。文檔
若是核心板/開發板爲JTAG接口,則能夠這樣接。JTAG接口中的SWO引腳實際上就是PB3引腳。
查看STM32F103的數據手冊,PB3引腳的複用功能爲TRACESWO。
和UART實現printf打印輸出相似,UART是重定向printf到UART,而這裏是重定向到ITM。只需這兩行代碼就能實現SWO輸出,不像UART同樣還要編寫UART驅動。(此函BSP_SWO.c文件中)
其中的ITM_SendChar函數位於core_cm3.h(或cm4 cm7)中,直接調用便可。
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.1 運行STM32 ST-LINK Utility,進行如圖所示的配置,點擊Start就能夠了。
5.2 使用Keil下載程序以前,須要斷開與STM32 ST-LINK Utility的鏈接。
不然不能下載,提示鏈接錯誤。
打印信息用串口也能夠作到,SWO的優點是什麼?
1. 串口是MCU的片內外設,佔用一個外設資源,而SWO不佔用外設
2. 使用不一樣的MCU須要從新編寫串口的驅動,而SWO不須要寫驅動
3. 串口輸出通常使用中斷方式發送,調試時可能須要在中斷中觀察某些信息,這樣中斷嵌套就容易出現問題,而SWO沒有中斷問題
4. SWO的速度比串口快得多,在時序要求較高的狀況下對代碼的影響較小。發送相同的字符串,SWO的速度是串口的8.7倍。
雖然SWO不能像串口那樣雙向傳輸,而咱們用串口調試不少時候也只是使用TX輸出而已。這樣看來,SWO引腳用更好的方式替代了串口的TX引腳。
若是您在學習SWO調試時遇到了什麼問題,淘寶店鋪搜索《萬般電子》,經過旺旺聯繫咱們,咱們將全力以赴爲您解答、解決。
本文檔由萬般電子編寫,版權全部。僅供我的學習使用,未經許可不得用於其它任何用途,不然追究相應責任。