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