基于STM32CubeProg、『Serial Wire Viewer』SWO打印輸出
作者 | strongerHuang
微信公眾號(hào)?|?嵌入式專欄
1寫在前面
SWD:Serial Wire Debug,串行線調(diào)試
SWO:Serial Wire Output,串行線輸出
SWV:Serial Wire Viewer,串行線查看器
ITM:Instrumentation Trace Macrocell,指令跟蹤微單元。
SWO串行線輸出是單引腳、異步串行通信,可在Cortex-M3/M4/M7上使用,并由主調(diào)試器探測支持。
它是利用Cortex內(nèi)核中ITM模塊來實(shí)現(xiàn)此功能。
連接引腳:
SWO輸出,需要一根SWO(引腳)線,同時(shí)需要借助SWV(查看器)查看數(shù)據(jù),我打算整理多種查看方法:
·基于Keil的『Debug(printf)Viewer』
·基于IAR的『Terminal IO』
·基于ST-LINK Utility的『Serial Wire Viewer』
·基于J-Link的『SWO Viewer』
·基于STM32CubeProg的『Serial Wire Viewer』
本文主要是第三種基于STM32CubeProg的『Serial Wire Viewer』,會(huì)結(jié)合STM32,ST-link工具講述相關(guān)配置。
想更加了解ITM,請(qǐng)參看《printf系列教程03》中第二章節(jié)<關(guān)于ITM>。
2SWO引腳配置
SWO引腳可以理解為UART的Tx引腳,如果不連接此引腳,則(SWV)終端不會(huì)接收打印信息。
對(duì)于STM32而言,只要是Cortex-M3/M4/M7內(nèi)核的MCU都有SWO引腳。
而Cortex-M0則沒有此項(xiàng)功能,包含STM32F0、STM32L0和STM32G0等。
在STM32CubeMX工具中,Debug選項(xiàng)進(jìn)行如下配置即可。
3SWO輸出代碼
在STM32CubeProg的『Serial Wire Viewer』顯示打印信息?和 ST-LINK Utility類似,與Keil、IAR差異在于:顯示的位置不同,MCU中代碼其實(shí)一樣。
3.1 重定義fputc
和UART實(shí)現(xiàn)printf打印輸出區(qū)別就是:將重定義代碼中UART發(fā)送字符,改為ITM發(fā)送字符。
int fputc(int ch, FILE *f){ ITM_SendChar(ch); return ch;}
ITM_SendChar說明
這個(gè)函數(shù)位于core_cm3.h(或cm4 cm7)中,直接調(diào)用即可。
修改ITM端口
比如:修改成使用ITM端口1,修改該函數(shù)對(duì)應(yīng)值即可:
提示:若軟件修改了ITM端口,需要使能對(duì)應(yīng)ITM刺激(Stimulus)端口才能正常打印輸出。
4SWV終端配置及輸出
顯示終端就是STM32CubeProg這個(gè)上位機(jī)軟件。
STM32CubeProg下載地址:
https://www.st.com/en/development-tools/stm32cubeprog.html(公號(hào)不支持外鏈接,請(qǐng)復(fù)制鏈接到瀏覽器打開)
推薦閱讀我的文章:STM32CubeProg介紹、下載、安裝和使用教程
燒寫程序到MCU,通過ST-Link連接,打開STM32CubeProg軟件,從菜單進(jìn)入SWV:
配置時(shí)鐘和使能ITM端口:
提示:ITM端口默認(rèn)使用port0,也可修改軟件(見上面軟件),實(shí)現(xiàn)0~31任意端口。
4.1 輸出效果
提示:
1.CPU時(shí)鐘必須相同;
2.ITM端口號(hào),軟件和查看器(SWV)配置須一致;
5下載
為方便大家理解,提供源碼工程下載,參考代碼:
STM32F103(HAL)_SWO
STM32F411(HAL)_SWO
百度網(wǎng)盤:
https://pan.baidu.com/s/1aYBuHtOgtLqLvj6SsMYlQA
提取碼:nbd3
提示:
1.公眾號(hào)不支持外鏈接,請(qǐng)復(fù)制鏈接到瀏覽器打開。
2.源碼僅供個(gè)人學(xué)習(xí)參考,不一定適用于實(shí)際項(xiàng)目。
3.若鏈接失效,請(qǐng)關(guān)注公眾號(hào),回復(fù)『printf系列教程』獲取最新鏈接。
6
說明1.該文檔僅供個(gè)人學(xué)習(xí)使用,版權(quán)所有,禁止商用。
2.本文由我一個(gè)人編輯并整理,難免存在一些錯(cuò)誤。
3.本文收錄于公眾號(hào)『嵌入式專欄』,關(guān)注微信公眾號(hào)回復(fù)【printf系列教程】即可查看全系列教程。
長按前往圖中包含的公眾號(hào)關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!