軟件啟動模式導致 IWatchDog 失效
該問題由某客戶提出,發(fā)生在 STM32F103VET6 器件上。據(jù)其工程師講述:其產(chǎn)品中使用了 STM32,已量產(chǎn)。在發(fā)給其客戶的產(chǎn)品中,部分出現(xiàn)不開機現(xiàn)象。其工程師在現(xiàn)場測試后發(fā)現(xiàn) STM32 的 HSE 沒有起振。通過拉低 NRST 管腳對 SMT32 復位后,HSE 起振且系統(tǒng)恢復正常工作。于是懷疑 STM32 的HSE 的缺陷導致了其不起振。
調(diào)研:
檢查其硬件電路設計的 HSE 部分,在原理圖及 PCB 中勻未發(fā)現(xiàn)錯誤。檢查 STM32 的供電情況,VDD、VDDA、VBAT、Vref+、Vref-、VSS、VSSA 未發(fā)現(xiàn)異常。檢查 BOOT0 管腳的設置,未發(fā)現(xiàn)異常。檢查 NRST 的外圍電路,未發(fā)現(xiàn)異常。對其產(chǎn)品重新上電,可以正常起動、工作。檢查軟件計,發(fā)現(xiàn)其 IWatchDog 的啟動模式為軟件啟動。于是,要求其工程師將其改為硬件起動模式,然后對此前出現(xiàn)異常的產(chǎn)品更新程序后重新測試。經(jīng)過一段時間的觀察后,發(fā)現(xiàn)其不再重現(xiàn)先前的問題。
結(jié)論:
猜測 STM32 在運行中受到了連續(xù)的干擾。在程序跑飛之后,由于 IWatchDog 溢出而引起STM32 復位。復位之后干擾依然存在,程序再次跑飛。由于設置了軟件啟動模式,導致IWatchDog 此時尚未開始工作,從而不能再次復位 STM32。于是,干擾過后,STM32 不能自行恢復到正常的工作狀態(tài)。而HSE 不起振則是由于軟件未來得及對 HSE 開啟而表現(xiàn)出的一個現(xiàn)象。
處理:
將 IWatchDog 的啟動模改為硬件啟動,可以保障 STM32 在干擾過后能夠自行的恢復到正常的工作狀態(tài)。
建議:
STM32 的 IWatchDog 設有兩種啟動模式,一種是軟件啟動模式,另一種是硬件啟動模式。在軟件啟動模式下,IWatchDog 在復位之后暫時是關(guān)閉的,直到軟件對其開啟之后才開始工作。而在硬件啟動模式下,在復位結(jié)束時,IWatchDog 已經(jīng)開始工作,無須軟件干預。于是,同硬件啟動模相比,軟件啟動模式在時間上多了一個“不安全窗口”,如圖(二)所示:
如果 STM32 在“不安全窗口”內(nèi)受到干擾而跑飛,那么系統(tǒng)是無法自恢復的。所以,要使 IWatchDog 有效的工作,硬件啟動模式是必須的選擇。通常,在編程器的操作界面上會有相關(guān)的選項,以供使用者選擇用哪種啟動模式來啟動 IWatchDog。雖然用戶程序也可以通過對 STM32 的 Option Bytes 進行設置來實現(xiàn)兩種啟動模式的選擇,但不建議這樣做,因為這需要相關(guān)的軟件具有嚴謹控制邏輯,處理不當會留下安全隱患
評論