使用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,串行線輸出spa

SWVSerial Wire Viewer,串行線查看器調試

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

 

  在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調試時遇到了什麼問題,淘寶店鋪搜索《萬般電子》,經過旺旺聯繫咱們,咱們將全力以赴爲您解答、解決。

 本文檔由萬般電子編寫,版權全部。僅供我的學習使用,未經許可不得用於其它任何用途,不然追究相應責任。

相關文章
相關標籤/搜索