今天我們來聊聊正經(jīng)的“狗”,屬于單片機的專屬Dog
從字面的意思來看,就是負責(zé)看門的,那在單片機的系統(tǒng)中是如何實現(xiàn)“看門”的本領(lǐng)的?
看門狗,簡寫WDT,屬于定時器的一種,當(dāng)出現(xiàn)計時溢出的時候,就會觸發(fā)系統(tǒng)復(fù)位,使程序重新開始執(zhí)行,是一種保護機制。當(dāng)運行的系統(tǒng)遇到強磁場,導(dǎo)致系統(tǒng)跑飛(正常系統(tǒng)中會定時喂狗)而不能正常喂狗時,看門狗就能強制復(fù)位整個系統(tǒng),使程序重頭執(zhí)行。這樣就能避免系統(tǒng)停滯帶來的風(fēng)險和事故。特別是在工業(yè)領(lǐng)域,非常常用。
那如何讓這個“定時器”不溢出呢?
正常狀態(tài)下,我們使用的時候是不允許看門狗溢出的,不然系統(tǒng)一直復(fù)位,還怎么運行程序呢?
所以我們要定時定點的給對應(yīng)的寄存器“置一次值”,就是我們常說的“喂狗”。
現(xiàn)實中我們養(yǎng)的寵物狗,如果長時間不喂,它會不會一直叫,或者一直以各種方式騷擾你,讓你無法正常工作,所以要想避免這種情況出現(xiàn),就得按時“喂狗”。
單片機中的“喂狗”和實現(xiàn)中的“喂狗”是不一樣的。
單片機中的“看門狗”自然也和實現(xiàn)中的狗沒有任何的關(guān)系。一個是物理上的,一個是生物上的。
但是我們完全可以借助現(xiàn)實中的狗來理解單片機中看門狗的概念
從STM32的手冊中我們可以看到,STM32中簡稱為IWDG,中文名:獨立看門狗。(這里看不懂的可以直接跳過)
當(dāng)IWDG看門狗模塊監(jiān)測到計數(shù)溢出時,IWDG reset信號輸出低,經(jīng)過與邏輯電路觸發(fā)脈沖發(fā)生器,產(chǎn)生一個正向窄脈沖以控制MOSFET在該脈沖寬度期間導(dǎo)通,并經(jīng)由濾波電路產(chǎn)生系統(tǒng)復(fù)位事件信號,進而觸發(fā)STM32復(fù)位。
至于軟件上如何配置相應(yīng)的寄存器來啟動“看門狗”的本文就不展開講解了,今天核桃主要想和小伙伴們分享一下外置的“硬件看門狗”是如何工作的。
我們先看圖1所示:
圖1
先理清SP706各個管腳的作用
MR 手動復(fù)位輸入端:也就是當(dāng)MR電壓低于0.6V時,RESET輸出有效復(fù)位信號。
PFI 門限檢測器輸入端:當(dāng)電壓跌落低于1.25V時,PFO輸出低電平。
WDI 看門狗輸入端: 也就是常說的喂狗,當(dāng)WDI維持高電平或者低電平超過1.6S后,看門狗定時器就會溢出,WDO直接輸出低電平。只有WDI的電平在1.6S有跳變,看門狗的定時器才會被清零。(就是說1.6s內(nèi)得給你家狗狗吃的,不然它會叫)
RESET 復(fù)位輸出管腳:受VCC和MR控制。
WDO 看門狗輸出端:當(dāng)計時溢出和VCC低于復(fù)位的門限時,WDO輸出低電平,正常情況下輸出高電平。
工作原理:
PFI和PFO我們可以暫時不管,都是用來監(jiān)測電壓的。
WDI 我們知道是看門狗的輸入管腳,也就是說芯片一上電工作,定時器就開始計時,如果超過1.6S,WDI管腳的電平?jīng)]有任何跳變的話,定時器就會溢出,WDO輸出低電平,由于WDO是直接連接到MR的,所以MR也會同時被拉低0.6V以上,此時RESET管腳也會輸出復(fù)位信號,使整個單片機系統(tǒng)復(fù)位。SW1就是按鍵,實現(xiàn)手動復(fù)位的。
那圖1這個電路就沒有任何問題了嗎?
答:圖1這個電路是有缺陷的!
如果單片機是新的,沒有任何程序的,這個時候你需要往單片機里面燒錄程序的,能保證1.6S內(nèi)燒錄完程序嗎?顯然不太現(xiàn)實的,所以這個時候就無法燒錄程序了,因為單片機一直在復(fù)位,是無法正常燒錄程序的。
那該怎么辦呢?
其實很簡單,只需要WDO和MR之間的連接是人為可控的就行。具體實現(xiàn)方法如下圖2圖3所示:
圖2
當(dāng)在需要燒錄程序時,通過跳線帽把MR和WDO斷開即可。燒錄完成后再把跳線帽插回去即可。
或者采用圖3的這種方式,都是沒有問題的。
圖3
圖3這個電路大伙可以自行分析一下,原理基本一樣!
那假如整個系統(tǒng)真正跑起來需要的時間遠遠超過1.6S了呢?看門狗電路又該如何設(shè)計呢?
好了,今天就先寫到這吧!