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

電磁流量計(jì)調(diào)試過程中存在的問題以及解決措施
STMCU應(yīng)用過程中與電源相關(guān)的案例分享

評(píng)論