3. 解決方法
在一些供電比較特殊的場合,如太陽能供電,電池供電等,可能會導致穩壓晶元輸出的3.3v 上公升緩慢。 在這種供電情況下,會導致mcu宕機, 讓人感覺的程式沒有跑起來。
在此情況下,mcu 為什麼跑不起來呢, 筆者以stm32l072 晶元為例, 具體的分析一下。
我們先了解 stm32電源控制中有三個復位方式:
上電復位 (por)
掉電復位(pdr)
欠壓復位(bor)
mcu供電電壓為vdd,開始時為0v, mcu 處於復位狀態, 開始供電時,vdd 逐漸公升高,當大於por 電壓時,過了trsttempo 時間, mcu 處於非復位狀態, mcu 開始執行。當vdd 下降時, 低於pdr 電壓時, mcu 變成復位狀態。
por和pdr的電壓是固定的可通過資料手冊檢視
mcu供電電壓為vdd,開始時為0v, mcu 處於復位狀態, 開始供電時,vdd 逐漸公升高,當大於bor 高閾值電壓時,mcu 處於非復位狀態, mcu 開始執行。當vdd 下降時, 低於bor 高閾值時, mcu 變成復位狀態。上圖的 預留100mv是為了防止電壓抖動時出現頻繁復位。
bor 的電壓值是可程式設計的, 分為好幾個等級,如下:
上電和掉電復位 與 欠壓復位功能是互斥的,只能使用一種, 要麼 上電和掉電復位 ,要麼 欠壓復位, 在沒有操作的情況下,mcu 預設使用的 上電和掉電復位。
但是上電復位的電壓(por= 1.5v) 低於mcu 能工作的最低電壓(vdd =1.65v),為了能讓mcu 達到最低工作電壓之後再釋放 復位狀態, 為此延時了 trsttempo 時間,該時間值約為0.7ms。
也就是在0.7ms內,vdd 電壓會公升到1.65v以上, 這樣過了0.7ms 後釋放復位, mcu 就可以正常的執行,這是正常的情況,但是在緩慢上電的情況下, 在0.7ms 之後 vdd 電壓可能還是1.65以下, 雖然釋放了復位狀態,變成非復位狀態,但是mcu 電壓不足,導致復位不成功,這樣, 等電壓上公升到1.65v 之後, 還是沒法正常執行。也就出現所謂宕機的情況。
STM32 軟體重啟導致宕機的情況分析
在乙個專案中需要用到看門狗和軟體重啟,但是在工作過程中發現存在一種情況會導致stm32宕機,經過分析是軟體重啟過程中復位訊號被外部電路強制拉高,無法在復位後4個時鐘拉低復位管腳,因此,將該復位引腳斷開和外部連線即可正常執行。現將該除錯記錄如下。看門狗餵狗週期初始化為10s。測試了四種情況 1 res...
STM32中NVIC Init導致的上電程式不執行
最近使用在stm32上使用ucosii的執行多工時候遇到乙個奇怪問題,我用到了4個串列埠,隨著程式增大,出現了上電後不執行的情況,我用乙個led閃爍指示執行,使用stlink進行debug沒有問題,但重新上電執行就不行,硬體復位了也不行,排除了硬體問題 指標跑飛 任務堆疊溢位 卡死在某死迴圈 等可能...
lua在stm32上的移植
2.增加檔案stm32 lua config.c,其內容如下,主要是重定義lua中檔案操作的底層函式 即fopen fread fclose等函式要呼叫的函式 include includes.h include lcd get res.h include ff.h pragma import us...