//alientek mini stm32開發板v1.9範例**5
//獨立看門狗實驗
//正點原子@alientek
//技術論壇:www.openedv.com
stm32f103rbt6屬於中容量版本的mcu
看門狗的原理:微控制器系統在外界的干擾下會出現程式跑飛的現象導致出現死迴圈,看門狗電路就是為了避免這種情況的發生。看門狗的作用就是在一定時間內(通過定時計數器實現)沒有接收餵狗訊號(表示 mcu 已經掛了),便實現處理器的自動復位重啟(傳送復位訊號) 。
以下摘自《不完全手冊——庫函式》文件
stm32 的獨立看門狗由內部專門的 40khz 低速時鐘驅動,即使主時鐘發生故障,它也仍然有效。這裡需要注意獨立看門狗的時鐘是乙個內部 rc 時鐘,所以並不是準確的 40khz,而是在 30~60khz 之間的乙個可變化的時鐘,只是我們在估算的時候,以 40khz 的頻率來計算,看門狗對時間的要求不是很精確,所以,時鐘有些偏差,都是可以接受的。
iwdg_pr 和 iwdg_rlr 暫存器具有寫保護功能。要修改這兩個暫存器的值,必須先向iwdg_kr 暫存器中寫入 0x5555。將其他值寫入這個暫存器將會打亂操作順序,暫存器將重新被保護。重裝載操作(即寫入 0xaaaa)也會啟動寫保護功能。
接下來,我們介紹預分頻暫存器(iwdg_pr),該暫存器用來設定看門狗時鐘的分頻係數,最低為 4,最高位 256,該暫存器是乙個 32 位的暫存器,但是我們只用了最低 3 位,其他都是保留位。
比如我們設定 prer 值為 4,rlr 值為3* 625,那麼就可以得到 tout=3*64×625/40=3000ms,這樣,看門狗的溢位時間就是 3s,只要你在一秒鐘之內,有一次寫入 0xaaaa 到 iwdg_kr,就不會導致看門狗復位(當然寫入多次也是可以的)。這裡需要提醒大家的是,看門狗的時鐘不是準確的 40khz,所以在餵狗的時候,最好不要太晚了,否則,有可能發生看門狗復位。
int main(void);在main函式中,我新增了乙個}
printf("\r\n程式啟動:\r\n");語句,用於檢視mcu是否有重新啟動。
實驗結果:
如果沒有任何干預,系統將在大約3秒中時間後就自動復位重啟,如果wakeup按鍵在3秒中內按下,就不會復位重啟。
STM32獨立看門狗(IWDG)
在微控制器執行的過程中,我們可能會遇到程式陷入死迴圈的情況。很顯然我們需要對這種情況進行提前的預防。看門狗就是用來進行該工作的。看門狗分為獨立看門狗和視窗看門狗,這一節介紹的是獨立看門狗。stm32的獨立看門狗由內部專門的40khz低速時鐘驅動,與系統主時鐘分開工作,也就是說,主時鐘損壞時,看門狗仍...
STM32 獨立看門狗異常復位
程式中使用了定時器來執行餵狗操作,void tim4 irqhandler void if g iwdg cnt 200 iwdg feed 每隔100ms喂一次狗 tim clearitpendingbit tim4,tim it update 看門狗定時1s復位,iwdg config iwdg...
獨立看門狗實驗
這個實驗,如果沒有餵狗時,系統就會產生復位,導致系統斷電一下,所有led燈會滅一下 這裡用到了外部中斷 也可以不用 外部中斷可以自己加 include stm32f4xx.h void led init void void key init void void delay void void iwd...