stm32 非debug模式程式無法執行

2021-09-12 13:55:37 字數 1052 閱讀 9627

最近負責乙個專案,用到stm32f4的一款高效能晶元。研發過程中遇到乙個很詭異的現象,前前後後折騰了兩三天,最後才搞定。由於是新手,經驗不足,排故過程很糾結~~

現象如下:

2.通過jlink除錯程式,每次均正常執行。太詭異了!

其次,考慮電源供電不穩定問題。通過萬用表測量各個模組電壓,發現電壓均正常值。那也有可能是系統上電時刻,由於負載變化,導致電壓跳變,之後電壓又穩定了,所以測量不出來。通過示波器捕捉電壓變化,未發現明顯的異常跳變。通過萬用表測電流為88ma,並不大。初步認為不是電源供電問題導致。

然後,考慮是否是由於復位訊號不穩定的原因。板子採用了外接復位晶元,上電後會產生復位訊號,此提供給處理器、藍芽等模組。由於jlink除錯時會自動產生乙個復位訊號,讓系統恢復預設狀態,然後程式開始執行,因此除錯下程式應該都能正常啟動。但是如果程式斷電後上電啟動,如果復位訊號過短或者不穩定,有可能導致無法正常啟動了。完美的解釋!哈哈,那一瞬間彷彿找到問題所在了。程式無法正常啟動時,reset訊號手動接地(給乙個低電平脈衝),處理器都開始工作了!這進一步驗證了我的推斷。於是鎖定是復位訊號不穩定導致的,開始折騰復位訊號,通過示波器觀察、隔離復位訊號、加濾波電容、換復位晶元等方法進行定位。最後發現復位訊號感覺也沒有什麼問題,真是怪了!糾結~~~~

後來有人建議是不是晶振不穩定。但是,晶振不穩定,除錯程式時也應該出現同樣現象啊,道理上解釋不通啊。無解啊~~~

後來求助同事,他是電子硬體方面的專家。我們幾人仔細琢磨了板子的原理圖和實驗現象後,他突然問你的boot0怎麼沒有接電阻到公共地啊?我說接了吧,之前還用萬用表量過電平,是低電平。他說不對啊,就是沒接地啊。我才猛地想起來,板子是另外乙個同事焊的,交到我手裡時說板子已經仔細檢查過了,沒問題。當時,由於專案緊張,就沒有再仔細核實。我再仔細一看,確實沒接地,也就是懸空狀態!而之前測電壓是低電平,有可能是由於下拉電阻的作用。崩潰了!這麼粗心,居然沒有自己檢查。趕緊焊電阻接地,重新上電,發現正常了。測試了三四十次,都是正常的。看來這次真正找到原因了,就是由於boot0懸空而導致的。boot0懸空時,其狀態是不確定的,會導致程式無法從userflash中正常啟動,就可能出現時好時不好的現象了!哎,原來是這樣。終於長噓了一口氣。

原文:

stm32燒不進去程式 STM32啟動模式

stm32的復位方式有三種 上電復位,硬體復位和軟體復位。當我們在flash download中勾選了reset and run時,把程式燒寫進去晶元後,重啟晶元就相當於軟體復位。當我們把電源接上,晶元啟動,這種情況屬於上電復位。當我們按下復位鍵,晶元重啟,這種情況屬於硬體復位。產生復位後,在系統時...

STM32啟動模式

stm32三種啟動模式對應的儲存介質均是晶元內建的,它們是 1 使用者快閃儲存器 晶元內建的flash。2 sram 晶元內建的ram區,就是記憶體啦。3 系統儲存器 晶元內部一塊特定的區域,晶元出廠時在這個區域預置了一段bootloader,就是通常說的isp程式。這個區域的內容在晶元出廠後沒有人...

stm32啟動模式

1.實驗環境 野火stm32指南者 stm32f103vet6 使用者快閃儲存器 晶元內建的flash。正常的工作模式。sram 晶元內建的ram區,就是記憶體。可以用於除錯。系統儲存器 晶元內部一塊特定的區域,晶元出廠時在這個區域預置了一段bootloader,就是通常說的isp程式。這個區域的內...