“阿圓,今天又拿什么東西來忽悠人啊?不用串口打LOG,你用什么?顯示屏嗎?” 哈哈,當(dāng)然不會(huì)是顯示屏了,今天要說的是STM32調(diào)試時(shí)的一個(gè)小技巧,當(dāng)然最好用的調(diào)試工具還是串口,今天要說的ITM((instrumentation trace macrocell即測量跟蹤宏單元)可以作為串口調(diào)試的一種替補(bǔ)手段,比如在串口資源緊張時(shí),便可以讓ITM派上用場,嗯,他的用法比串口使用起來還要簡單。 打開我們的STM32Cube生成一個(gè)工程,阿圓我就一般都生成一個(gè)帶FreeRTOS的工程 這里要注意的是 在SYS列表里我們要在DEBUG里先中Trace Asynchronous SW選項(xiàng)。事實(shí)上選中此項(xiàng)并不會(huì)額外生成代碼,只是讓STM32Cube保留此引腳而己。 好的,為了使用ITM,我們需要對工程進(jìn)行一些配置,打開生成的工程, [1]打開Project的options->Debug,這個(gè)界面在Keil里很好找吧,找不到的,自己認(rèn)真反省一下。 阿圓使用的是J-Link,在這里就需要把ort改成SW,關(guān)鍵一步。如果你用的是ST-Link應(yīng)該就不需要更改了。 然后點(diǎn)擊此頁面中的Trace 在這個(gè)頁面里勾上Enable, Core的時(shí)鐘頻率需要設(shè)置成STM32Cube生成時(shí)的核心頻率,阿圓設(shè)置的是72MHz,其它默認(rèn),保存即可。 [2]接下來需要在main.c中添加一丁點(diǎn)的代碼 是的,就這么幾行,接下來就可以隨便使用printf啦。 “咦,阿圓,這log打到哪里去了?。浚???” 莫急,事實(shí)上ITM不僅僅可以用來打log,ITM的使用需要配合SWV(Serial Wire Viewer)。借助SWV可以實(shí)現(xiàn)PC寄存器的采樣,CPU事件計(jì)數(shù),異?;蛑袛嗟臅r(shí)間統(tǒng)計(jì)等,打log只是把把ITM接口的SWO用來實(shí)現(xiàn)類uart TX功能而已。 所以呢,這就需要各個(gè)IDE的支持,目前EVARM,KEIL,JLINK,ST-Link都沒有問題。 在Keil中呢,只有開始調(diào)試了才看得到調(diào)試接口,沒調(diào)試時(shí)是沒有的,不要浪費(fèi)時(shí)間找了喂。 其實(shí)右下角就是啦,阿圓己經(jīng)設(shè)置過了。 好了,我們現(xiàn)在在默認(rèn)線程里試驗(yàn)一下,就一直打印Hello+次數(shù)吧,開擼! 調(diào)試運(yùn)行,嗯,確實(shí)打出來了~喲喲喲又學(xué)到一招!ITM的log打印是不是也非常簡單?在想偷懶或者沒有串口線的時(shí)候就用這個(gè)辦法,so easy~ 周未,阿圓也休息,就不寫長篇大論了,記得點(diǎn)贊收藏關(guān)注呀! |
|