Stm32出現死機,程序跑飛這類的問題,我之前在開發過程中就遇到過,造成這種不良,有很多可能的原因,軟件硬件都有可能,需要從幾個方面去排查
硬件方面:
1stm32的供電電壓是否穩定,是否在正常工作電壓范圍內。電源文波大小一定要小,一般Ldo供電在3.3v在幾個ma,在stm32的vdda和vssa引腳一定要接磁珠,各個電源硬件要接濾波電容
2晶振以及旁路電容,一定要盡可能的靠近單片機,整個電路中是否有裸露的接口如usbio口這類的接口,因為冬天人體或者其他物體靜電很大,當瞬間大靜電通過接觸,傳導給單片機時,很容易引起單片機復位或者死機,所以有這樣的接口需要做防靜電電路,或者專用防靜電芯片在保護單片機不死機。
3單片機復位電路,一定在設計的時候需要加旁路電容,同時需要保證復位電路電源穩定,這個與第一點原因說明一樣。
4無線射頻信號,當電路中有無線類如藍牙wifigsm等無線射頻信號時,也很容易因為無線輻射干擾造成單片機死機,這個就需要找專業測試天線的公司或者設備或者人員去測試輻射狀態。無線射頻的電線一定要匹配好,否則很容易會有無法預測的不良狀態出現。
硬件是軟件運行的載體,需要在設計時候就考慮好,增加抗干擾因素,
硬件可以通過靜電臺空氣放電一萬伏,接觸式采用八千伏,使用一定數量的機器,一定次數的測試,如果不出現死機情況,就說明硬件基本沒有問題。
軟件方面
1考慮堆棧,編譯器默認啟動文件中,有堆棧設置的代碼,一般官方默認的堆棧設置的比較小,當你的項目代碼量大的時候,需要調整這個文件里面堆棧大小
2檢查代碼,是否有不合理死循環,檢查是否有定義的數組溢出,造成程序跑飛
3是否有使用內部flash存儲,當不合理的flash內存操作時,也會造成死機.經過批量試產,機器死機問題得到解決.
4不合理的中斷,當有多個中斷處理時候,一定要設置清晰各個中斷不同的中斷優先級,不合理的中斷設置,也有可能造成死機情況的出現。
5定義的數組不合理,在使用的過程中出現溢出,結果程序就在使用不可知的某一個flash位置的數據進行處理,所以這點也很重要。
以上是我根據自身項目經驗,對stm32死機問題的分析與處理。
想了解更多電子元器件,電子開發設計,嵌入式編程,研發相關管理知識或者觀點,請記得加【關注】
歡迎您轉發,謝謝您