STM32F7-Discovery使用ITM作為調試工具
時間:2018-09-26 來源:未知
關于代碼的調試手段,我在自己的一篇文章(//bbs.ickey.cn/index.php?app=group&ac=topic&id=54944鏈接中的《STM32F030 Nucleo-開發調試的經驗USART的重要性.pdf》)中已經詳細談到,為什么在調試中我們通常使用J-Link或ULINK或ST-Link(ST)或Open SDK(飛思卡爾)或Nu-Link(新唐)等在線仿真調試,而是選擇串口這種慢速的設備作為調試的手段之一。
因為通常我們使用串口作為調試工具,那么久意味著占用至少一個I/O口(通常只用Tx),并且還得存在一個COMS轉TTL電平的模塊,并且串口慢速,所以STM32提供了ITM。關于STM32的ITM,我也只是粗略的了解!所以在此對于它的概念不多廢話!我只知道一件事,那就是使用它,可以通過SWO接口進行像串口一樣的與PC機進行通信,實現UART/USART與PC機的串口助手功能,讀寫均可。
OK!干這件事,首先需要準備好如下幾件東西!
1、ST-Link驅動,stsw-link009,但是通常有些童鞋的電腦安裝ST-Link驅動是,只安裝成功了ST-Link的驅動,而沒有安裝成功虛擬串口的驅動。特別注意:這兩個驅動,必須都安裝好,否則玩不了ITM。安裝好的示意圖如下:

如果不能安裝成功的童鞋,請參看我的另一篇文章進行安裝,通常來說,還沒遇見不行的!嘿嘿!地址://bbs.ickey.cn/group-topic-id-55579.html
2、ST-Link Utility ,ST-Link軟件編號為stsw-link004。這是一個驅動也是一個工具,而ITM的使用,必須依賴于這個工具。
3、移植好程序代碼。
OK!其實就是這么幾點!首先呢,還是有必要介紹這個ITM的使用來源的!首先我在STM32所有的內核文件中發現個事實,
在這里使用Cortex-M7內核的內核頭文件core_cm7.h作舉例,如下圖:

呵呵!可以看到,Debug輸入/輸出函數。我去買還看到了聲明輸入的數組內存區。再看看函數:

從注釋和函數名來看,基本上就已經確定了,這是一個輸出函數!現在先不管它往哪里輸出!在往下看:

呵呵呵!不用說,一眼就能看出它是一個輸入函數,從外部讀取數據到MCU。再往下看!

從注釋和函數名基本上也能看出,這是一個校驗函數,并且是校驗輸入的緩存空間的。這里也先不管!再往下看!呵呵!已經沒有往下了,這已經是core_cm7.h文件的后一個內聯函數了。那么久很明確一個事實了,關于ITM的函數只有3個,并且一個為輸出,一個為輸入,一個為校驗。這絕對不是巧合,而是精心設計的。

通過從上圖三個手冊中了解,ITM是一種虛擬的串口,可以向串口一樣進行將數據打印到指定輸出設備上,但是必須滿足一個條件,那就是它依賴于SWO引腳,通常我們使用J-Link或者ST-Link簡易模塊進行多STM32程序的燒錄,通常只需要兩個端口,SW_CLK和SW_DIO,這種情況是不能使用ITM的,因為SWO引腳并沒有接!那么這個神秘的SWO引腳到底是什么引腳呢?呵呵!快的方法是在原理圖當中找,如下圖:

呵呵!這是從STM32F7-Discovery板卡的原理同中摳出來的!這個可以根據ST官方的權威確定它的正確性!哈哈!那么還有木有什么其他的證據了呢?其實這種基礎的東西,可能是在F7的手冊里找不到的,但是在入門型的MCU的手冊了肯定是有的,所以我就在F103的參考手冊中找到了如下圖:

沒錯!就是上圖了,不多說,證據已經充足!如果有興趣,可以詳細了解J-Link和ST-Link接口。
特別注意:在這里也提供了這種找資料的方法(實際上是因為我想把這種方法表述出來,所以才有以上的證明),當我們在玩高端的芯片是,有些比較基礎的資料在詳細芯片的手冊上可能找不到,那么怎么辦呢?通常的做法是,找到這個公司相應的入門級芯片的手冊參考,可能會有需要的資料,這一點在玩三星的S3C6410時,參看協處理器寄存器,命令等,需要參考S3C2440的協處理器手冊的情況體現的玲離盡致(但是到了Cortex-A系列,由于內核改動比較大,所以S5PV210等的協處理器手冊和S3C2440的還是差別很大的,所以也要注意等級)。
OK!廢話了一大堆!還沒講咋使用ITM呢!其實沒什么實現不實現的,人家已經提供打印函數了,咱就移植一下printf,方便調試打印即可!如下圖:

沒錯!你看的沒錯!就是一行代碼!直接調用內聯函數__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch),在printf的預留接口調用即可!這樣就可以打印了!關于輸入,就不多說了!一樣的道理!看如下的調用!

沒錯!你的眼睛沒花!就是這樣的簡單!
4、使用ITM輸出打印在PC端。
該如何使用這個ITM打印在PC端呢?普通的串口助手???這是不行的!這就是前面為毛說必須裝ST-Link Utility工具的原因。就是得使用它!安裝好ST-Link Utility工具后,在桌面上會看到:

這樣的快捷方式!雙擊打開!有如下界面!

進行操作:ST-Link->Printf via SWO viewer得到如下界面:

進行如下步驟設置:
(1)在圖中1位置設置系統是在頻率,因為這塊STM32F7-Discovery板卡目前運行的是216MHz,所以就填寫216M了。
(2)點擊圖中位置2,Start,成功啟動后,就可以看到圖中3有字符串打印了!這么這就算是完事了。

