使用SWO代替UART,實現Printf打印功能


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

 

本文內容已經整理成PDF,提供給大家下載:

https://pan.baidu.com/s/1EhJulPbD6Cp5OohzpQY0Fg&shfl=sharepset   提取碼:h43c

 

1  寫在前面

SWOSerial Wire Output,串行線輸出

SWVSerial Wire Viewer,串行線查看器

ITM:Instrumentation Trace Macrocell,儀器跟蹤宏單元

 

  在Cortex-M3\M4\M7系列MCU內核的調試組件有一個儀器跟蹤宏單元(ITM)ITM的主要用途是調試信息的輸出(例如printf格式輸出)。

  SWO是單引腳、異步串行通信,可在Cortex-M3\M4\M7內核的MCU使用,由調試器探測支持利用MCU內核中ITM模塊實現。

  對於STM32Cortex-M3\M4\M7內核的MCU都有SWO引腳。Cortex-M0內核的MCU沒有此功能,例如STM32F0STM32L0等。

 

2  硬件平台

  將ST-LINK V2-1與核心板連接,SWO引腳連接到PB3

 

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

 

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

 

3  代碼部分

  和UART實現printf打印輸出類似,UART是重定向printfUART,而這里是重定向到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.cBSP_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調試時遇到了什么問題,淘寶店鋪搜索《萬般電子》,通過旺旺聯系我們,我們將盡心盡力為您解答、解決。

 本文檔由萬般電子編寫,版權所有。僅供個人學習使用,未經許可不得用於其它任何用途,否則追究相應責任。

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM