總的來講,單片機調(diào)試是單片機開發(fā)工作必不可少的環(huán)節(jié)。不管你愿不愿意,調(diào)試過程中總會有各種不期而遇的問題出現(xiàn)在我們面前來磨礪我們。這里分享幾點STM32調(diào)試過程中與開發(fā)工具及IDE有關(guān)的幾個常見問題,以供參考。
1、做低功耗調(diào)試時連接不上目標(biāo)板
默認(rèn)情況下,當(dāng)MCU進(jìn)入低功耗模式后,內(nèi)核時鐘停止工作,調(diào)試連接將中斷。不過,通過設(shè)置DBGMCU寄存器控制位,即使進(jìn)入低功耗模式,還是可以進(jìn)行一定程度的調(diào)試。
在保證DGBMCU控制位正確配置前提下,還需注意SWD調(diào)試腳沒有被配置為【analog state】模擬輸入狀態(tài)。我們在具體應(yīng)用時為了降低功耗可能會將芯片的包括SWD調(diào)試腳在內(nèi)的GPIO配置為模擬功能,這樣會到導(dǎo)致調(diào)試器連接不上情況。此時在連接前先做下復(fù)位,有時可能多做幾次復(fù)位才連接得上。
當(dāng)然,上面是指低功耗模式下連接不上目標(biāo)板的情況。如果是一般性的連接不上,原因就更多了,比方硬件器件、連接線路、驅(qū)動程序、用戶代碼本身等,這些要結(jié)合具體情況來分析。關(guān)于低功耗模式的調(diào)試支持,請參考各個系列參考手冊的相關(guān)描述。
2、打印輸出失敗
通常我們可以借助于串口助手做打印輸出。如果使用STM32虛擬串口,注意PC端的虛擬串口驅(qū)動程序安裝正常。相應(yīng)軟件包編號是STSW-STM32102。
再就是注意配置UART相關(guān)參數(shù)配置時,字長是包含了校驗位的。比方8位字長,它是由 7個數(shù)據(jù)位,1個校驗位組成。還有,VCP不支持字長在8位以下的傳輸。
另外,對于那些基于ARM CORTEX M3/M4/M7內(nèi)核的STM32芯片,我們可以使用SWO方式做打印輸出。
這里要注意的是:
a、不是所有MCU系列都支持SWO打印輸出;目前僅基于ARM Cortex M3/M4/M7內(nèi)核的芯片支持;
b、目前只支持SWD模式,不支持JTAG模式;
c、在調(diào)試環(huán)境里需做適當(dāng)配置和代碼補充,涉及到DBG_MCU_CR寄存器的控制位。
3、低功耗應(yīng)用中功耗數(shù)據(jù)異常
這個原因很多,比方,測量方面的原因,不屬于MCU的功耗也算進(jìn)來了;有些外設(shè)及管腳沒處理好,導(dǎo)致漏電流還在產(chǎn)生; 或者低功耗模式選擇不對,或者進(jìn)了低功耗模式馬上又醒了而誤測誤判等等。
這里再提醒1點:
設(shè)置進(jìn)入低功耗模式后,確認(rèn)是否還在調(diào)試模式。即檢查DBGMCU寄存器中與低功耗調(diào)試配置有關(guān)的寄存器控制位,確保關(guān)閉了低功耗調(diào)試狀態(tài)。做低功耗數(shù)據(jù)測試時,最好不要還連接著調(diào)試器,給我們帶來困擾。前不久就有人反映,用別的調(diào)試器連接著STM32目標(biāo)板測得功耗與用STLINK調(diào)試器連接著測得功耗大不 一樣,改用STLINK就合理了。
4、在Normal/System Reset模式下SWD連接不上目標(biāo)板
此時我們可以嘗試換個連接模式,比如Connect Under Reset,或者換個復(fù)位模式,比如Hardware Reset 。
如果說借助STLINK,即使使用Connect Under Reset或Hardware Reset方式還連接不上呢?我們可以查看下STLINK的NRST腳與目標(biāo)板上的MCU的NRST腳是否相連了。如果是nucleo板的話,還需確認(rèn)下跳線SB12是否為連接狀態(tài)。
5、MCO腳無時鐘信號輸出
我們在STM32調(diào)試過程中,有時需要引出主時鐘進(jìn)行輸出監(jiān)視,即將主時鐘通過MCO腳引出觀察。
要想正確輸出,MCO做正確配置是必須的了。當(dāng)然用CubeMx配置的話一般不會有啥大問題 。不過有個地方要注意,那個GPIO的輸出速率參數(shù)要合適配置,不同STM32系列的GPIO最大可輸出速率在數(shù)據(jù)手冊上都明確出來了。當(dāng)MCO輸出時鐘頻率較高以至于超過GPIO的輸出能力時,這時需要考慮先做分頻后再來做觀察。
一般來講,當(dāng)MCO的輸出頻率在1Mhz以上時,如果觀察到的波形帶有很嚴(yán)重的噪聲或者扁平的小幅度信號,甚至看不到輸出的時候,我們可以考慮下是否那個OSPEED參數(shù)設(shè)置得太小了;如果說看到周期較長、幅度較大帶有明顯上下峰值過沖情形的波形,我們可以考慮下是否那個OSPEED參數(shù)設(shè)置得太大了。
6、沒法對某些變量進(jìn)行計算和監(jiān)控或無法設(shè)置斷點
這個原因較多,具體到調(diào)試環(huán)境,很可能跟你編譯環(huán)境的優(yōu)化等級配置有關(guān)。
我們在MCU調(diào)試過程中,往往會用到編譯器的優(yōu)化功能來提升芯片的性能和精簡代碼空間。不過,經(jīng)過代碼優(yōu)化,往往可能給我們調(diào)試帶來些影響,主要體現(xiàn)在下面幾個方面:
a、 設(shè)置斷點方面出現(xiàn)障礙,有些代碼行沒法做斷點的設(shè)置;
b、 無法對某些變量進(jìn)行觀察;
c、 單步調(diào)試時出現(xiàn)代碼運行“不連續(xù)”的情形,即執(zhí)行到的地方和我看到的地方不一致;
因此,為了實現(xiàn)有效調(diào)試,我們在通過編譯器做優(yōu)化時要選擇合適的優(yōu)化等級?;驹瓌t是不影響調(diào)試體驗的前提下保障編譯效率。一般來講,在調(diào)試時建議將優(yōu)化等級設(shè)置在較低水平。比方KEIL MDK 推薦調(diào)試時將優(yōu)化等級設(shè)置在-O1, IAR 推薦調(diào)試時將優(yōu)化等級設(shè)置在-None,GCC推薦調(diào)試是將優(yōu)化等級設(shè)置在-Og.其實,編譯器的優(yōu)化等級設(shè)置越高,對代碼的規(guī)范性要求以及我們對編譯器的了解程度也越高。經(jīng)常有人代碼優(yōu)化前程序運行得好好的,代碼優(yōu)化等級調(diào)高好程序功能變得面目全非了。
上面提到的幾個問題及應(yīng)對措施,都是些可能性的提示或提醒,僅供參考,畢竟調(diào)試過程中出現(xiàn)的一個故障現(xiàn)象往往可以映射出多種應(yīng)用情形及具體原因。
-
mcu
+關(guān)注
關(guān)注
146文章
16796瀏覽量
349331 -
STM32
+關(guān)注
關(guān)注
2262文章
10846瀏覽量
353681
原文標(biāo)題:STM32調(diào)試過程中跟工具相關(guān)的幾個問題
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論