<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 軟件啟動模式導(dǎo)致 IWatchDog 失效

          軟件啟動模式導(dǎo)致 IWatchDog 失效

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          問題:
          該問題由某客戶提出,發(fā)生在 STM32F103VET6 器件上。據(jù)其工程師講述:其產(chǎn)品中使用了 STM32,已量產(chǎn)。在發(fā)給其客戶的產(chǎn)品中,部分出現(xiàn)不開機(jī)現(xiàn)象。其工程師在現(xiàn)場測試后發(fā)現(xiàn) STM32 的 HSE 沒有起振。通過拉低 NRST 管腳對 SMT32 復(fù)位后,HSE 起振且系統(tǒng)恢復(fù)正常工作。于是懷疑 STM32 的HSE 的缺陷導(dǎo)致了其不起振。

          調(diào)研:
          檢查其硬件電路設(shè)計的 HSE 部分,在原理圖及 PCB 中勻未發(fā)現(xiàn)錯誤。檢查 STM32 的供電情況,VDD、VDDA、VBAT、Vref+、Vref-、VSS、VSSA 未發(fā)現(xiàn)異常。檢查 BOOT0 管腳的設(shè)置,未發(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 在運(yùn)行中受到了連續(xù)的干擾。在程序跑飛之后,由于 IWatchDog 溢出而引起STM32 復(fù)位。復(fù)位之后干擾依然存在,程序再次跑飛。由于設(shè)置了軟件啟動模式,導(dǎo)致IWatchDog 此時尚未開始工作,從而不能再次復(fù)位 STM32。于是,干擾過后,STM32 不能自行恢復(fù)到正常的工作狀態(tài)。而HSE 不起振則是由于軟件未來得及對 HSE 開啟而表現(xiàn)出的一個現(xiàn)象。

          處理:
          將 IWatchDog 的啟動模改為硬件啟動,可以保障 STM32 在干擾過后能夠自行的恢復(fù)到正常的工作狀態(tài)。

          建議:
          STM32 的 IWatchDog 設(shè)有兩種啟動模式,一種是軟件啟動模式,另一種是硬件啟動模式。在軟件啟動模式下,IWatchDog 在復(fù)位之后暫時是關(guān)閉的,直到軟件對其開啟之后才開始工作。而在硬件啟動模式下,在復(fù)位結(jié)束時,IWatchDog 已經(jīng)開始工作,無須軟件干預(yù)。于是,同硬件啟動模相比,軟件啟動模式在時間上多了一個“不安全窗口”,如圖(二)所示:

          如果 STM32 在“不安全窗口”內(nèi)受到干擾而跑飛,那么系統(tǒng)是無法自恢復(fù)的。所以,要使 IWatchDog 有效的工作,硬件啟動模式是必須的選擇。通常,在編程器的操作界面上會有相關(guān)的選項(xiàng),以供使用者選擇用哪種啟動模式來啟動 IWatchDog。雖然用戶程序也可以通過對 STM32 的 Option Bytes 進(jìn)行設(shè)置來實(shí)現(xiàn)兩種啟動模式的選擇,但不建議這樣做,因?yàn)檫@需要相關(guān)的軟件具有嚴(yán)謹(jǐn)控制邏輯,處理不當(dāng)會留下安全隱患


          關(guān)鍵詞: 軟件啟動模式IWatchDo

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();