STM32獨立看門狗(IWDG)


造成程序跑飛,只是程序的正常運行狀態被打斷而進入死循環,從而使單片機控制的系統無法正常工作。看門狗就是一種專門用於檢測單片機程序運行狀態的硬件結構。

STM32內部自帶了兩個看門狗,獨立看門狗(IWDG)窗口看門狗(WWDG),這一節我們看一下獨立看門狗的工作原理相關寄存器操作。

1. 獨立看門狗(IWDG)

STM32的獨立看門狗由內部專門的40Khz低速時鍾驅動,即主時鍾發生故障,它也仍然有效,這里我們需要注意獨立看門狗的時鍾不是准確的40Khz,二是在30~60Khz之間變化的一個時鍾,只是我們估算以40Khz來計算,看門狗對時間要求不是很青雀,時鍾有點偏差還是可以接受的。

獨立看門狗相關的幾個寄存器

1.1. 鍵值寄存器(IWDG_KR)

寄存器各位描述如下:

獨立看門狗工作原理:在鍵值寄存器(IWDG_KR)中寫入0XCCCC,開始啟用獨立看門狗,此時計數器開始從其復位值OXFFF遞減計數,當計數器計數到末尾0X000的時候,會產生一個復位信號(IWDG_RESET),無論何時,只要寄存器IWDG_KR中被寫入0XAAAA,IWDG_RLR中的值就會被重新加載到計數器中從而避免產生看門狗復位。

預分頻寄存器(IWDG_PR)和重載寄存器(IWDG_RLR)的寫保護  :IWDG_PR和IWDG_RLR寄存器具有寫保護功能,要想修改這兩個寄存器的值,首先要向IWDG_KR中寫入0X5555。以不同的值寫入這個寄存器或者重裝載(寫入0XAAAA)都會重新啟動寫保護。

1.2. 預分頻寄存器(IWDG_PR)

該寄存器是用來設置看門狗的時鍾分頻系數,最低為4,最高位256,雖然是32位寄存器,我們只使用了最低3位,其他保留,預分頻寄存器各位定義如下:

1.3. 計數重裝載寄存器(IWDG_RLR)

該寄存器保存重裝載計數器中的值,32位寄存器,我們只使用了低12位有效,寄存器描述如下:

2. 獨立看門狗啟動過程

這樣,只要我們對以上三個寄存器進行相應設置,我們就可以啟動STM32獨立看門狗了,啟動過程如下:

2.1. 1、向IWDG_KR中吸入0X5555

通過這一步我們取消了IWDG_PR和IWDG_RLR的寫保護,下一步我們設置他們初值。

設置IWDG_PR和IWDG_RLR的初值。

我們計算一下看門狗的喂狗時間(看門狗溢出時間)計算公式

Tout=((4*2^prer)*rlr)/40

 其中Tout就是看門狗溢出時間(單位ms),prer是看門狗時鍾預分頻值(IWDG_PR值),范圍為0~7,rlr位看門狗重載值(IWDG_RLR)。比如我們設置prer為4,rlr的值為625,我們就可以計算得到Tout=64*625/40=1000ms,這樣,看門狗的溢出時間就是1S,只要在這一秒鍾內,有一次吸入0XAAAA到IWDG_KR,就不會導致看門狗復位(寫入多次也是可以的)(由於看門狗的時鍾不是准確40Khz,所以喂狗不要太晚,以免發生看門狗復位)。

2.2. 2、向IWDG_KR中寫入0XAAAA

通過這句可以將重載寄存器(IWDG_RLR)中的計數初值載入到看門狗計數器中(也可以時鍾該命令喂狗)。

2.3. 3、向IWDG_KR中寫入0XCCCC

通過這句我們就啟動了STM32的看門狗了,使能了看門狗,在程序里面我們就必須間隔一定的時間就喂狗,否則導致程序復位,利用這一點,我們通過一個LED來指示是否復位,驗證獨立看門狗。

STM32中看門狗核心在芯片內部,不需要外部電路,這里我們使用到了外部電路中的2個IO口,一個用來輸入喂狗信號,一個用來指示程序是否復位,喂狗使用WK_UP按鍵,程序重啟指示使用DS0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM