通過strongerHuang的教程,實現了SWO的兩種調試方法,
1、在keil調試的過程中,使用debug printf viewer打印信息,
2、在STM32 ST-LINK Utility中燒寫程序並打印信息。
幾點信息:摘錄自https://www.strongerhuang.com
SWD:Serial Wire Debug,串行線調試
SWO:Serial Wire Output,串行線輸出
SWV:Serial Wire Viewer,串行線查看器
ITM:Instrumentation Trace Macrocell,指令跟蹤宏單元
SWO串行線輸出是單引腳、異步串行通信,可在Cortex-M3/M4/M7上使用,並由主調試器探測支持。
它是利用Cortex內核中ITM模塊來實現此功能。
由於手頭上沒有串口,因此只能通過st-link進行信息輸出,增加調試方法。jlink也可以通過RTT和SWO的方法輸出信息。
手上有一個stlink,因此選擇swo方式。
具體的方法參見https://www.strongerhuang.com網頁或公眾號。
幾點注意事項:
1、如果要在STM32 ST-LINK Utility的Serial Wire Viewer打印信息,應該是stlink下在hex才能運行,keil里面下載程序是無法在Serial Wire Viewer中顯示的。
2、如果直接在keil中調試全速運行的話,直接調試,運行,打開debug printf viewer即可看到打印的信息。
另外,keil工程中需要開啟功能,添加printf的重定義,時鍾頻率要一致。端口號默認0就可以。
這個swo的方法比串口打印要更加有效率,而且不會干擾cpu運行。以后如果有jlink和stlink,都可以不用串口打印了,從打印效率來說:UART < SWO < JLink-RTT。記得nrf52系列是默認使用JLink的RTT功能的。
原文提到:與基於 UART 的文字輸出不同,使用 ITM 輸出不會對應用程序造成很大的延遲,在 ITM 內部有一個 FIFO,它使寫入的輸出消息得到緩沖。
3、SWO需要stm額外的引腳,stmcubemx中的debug選項需要配置為TraceAsynchronous Sw模式
4、RTT不需要額外的引腳,而且效率更加高。可見segger公司的實力還是很強大的。后續有用到RTT功能再寫一遍記錄文檔。
