STM32独立看门狗实验
一 為什么需要看門狗?
在MCU微型計算機系統中,MCU運行程序很容易受到外界電磁場的干擾,從而造成程序運行錯誤甚至發生跑飛現象,從而陷入死循環,程序的正常運行被打亂,從而造成不可預料的嚴重后果,于是人們就設計了一款用于實時監測計算機運行狀態的芯片,我們就將其稱為“看門狗(WatchDog)”。
二 看門狗的作用
看門狗在我們程序正常工作的時候是不工作的,也就是說他根本沒有任何作用,只有在單片機發生程序跑飛現象的時候看門狗才會產生一個復位脈沖強制單片機復位,從而使單片機正常運行。
三 STM32中的看門狗
STM32中內置了兩種看門狗,一個是獨立看門狗,另外一個是窗口看門狗,那么這兩種看門狗有什么區別呢?
獨立看門狗由內部RC振蕩器震蕩計時,因此其計時精度不夠高。
四 看門狗的工作原理
看門狗的工作原理步驟:
1 鍵值寄存器(IWDG_KR)中寫入 0xCCCC,開始啟用獨立看門狗。
2 看門狗開始從復位值 0xFFF 遞減計數,每次遞減1
3 計數器計數到末尾 0x000 時,會產生一個復位信號(IWDG_RESET)。
不管何時,我們都可以給鍵值寄存器(IWDG_KR)中寫入0xAAAA,那么單片機就會自動將IWDG_RLR(自動重裝載計數器)中的值重新寫入鍵值寄存器(IWDG_KR)中,鍵值寄存器會從自動重裝載計數器的值的基礎上,重新向下計數,這就是人們俗稱的“喂狗”。那么看門狗是如何實現實時監測程序的呢?看門狗會無時無刻的去喂狗,如果程序發生跑飛的現象,那么單片機程序就不能繼續去喂狗,繼而計數器計數到0,看門狗產生復位脈沖信號。
IWDG_PR (預分頻寄存器)和 IWDG_RLR(自動重裝載計數器) 寄存器具有寫保護功能,自動寫保護功能我們在單片機中已經見到很多了,寫保護在現在計算機當中經常遇到,畝的就是保護計算機的程序被隨意修改閱讀,從而造成程序跑飛等現象。要想取消這兩個寄存器的寫保護,就要分別向兩個寄存器中寫入命令,IWDG_KR 寄存器中寫入0x5555取消寫保護。
IWDG_PR (預分頻寄存器)用來設置看門狗的分頻系數,剛才我們說到,我們的獨立看門狗是LSI(40KHZ)的外部時鐘振蕩器得到的時鐘系數,我們設置了分頻系數就可以改變輸入看門狗的時鐘振蕩頻率。比如我們設置與分頻系數為4,那么得到的分頻頻率就是10HZ。
五 獨立看門狗常用操作庫函數
1 IWDG_WriteAccessCmd//取消寫保護 向其中寫入0x5555
2 IWDG_SetPrescaler//設置預分頻系數
3 IWDG_SetReload//設置重裝載值
4 IWDG_ReloadCounter//喂狗,寫入0xAAAA
5 IWDG_Enable//使能看門狗
6 IWDG_GetFlagStatus//獲取看門狗此時的狀態
六 獨立看門狗的操作步驟
1 取消寫保護
IWDG_WriteAccessCmd();
2 設置獨立看門狗的預分頻系數
IWDG_SetPrescaler();
3 設置獨立看門狗的重裝載值
IWDG_SetReload();
4 使能看門狗
IWDG_Enable();
5 看門狗喂狗
IWDG_ReloadCounter();
七 源碼分享
void IWDG_Init(u8 prer,u16 rlr)//設置prer為預分頻系數rlr為重裝載
{
//NO.1 取消寫保護
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//NO.2 設置獨立看門狗的預分頻系數
IWDG_SetPrescaler(prer);
//NO.3 設置獨立看門狗的重裝載值
IWDG_SetReload(rlr);
//NO.4 使能看門狗·
IWDG_Enable();
//看門狗喂狗
IWDG_ReloadCounter();
}
int main (void)
{
RCC_Configuration();
LED_Init();
KEY_Init();
IWDG_Init(4,625);
delay_ms(500);
GPIO_SetBits(LEDPORT,LED1);
while(1)
{
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1))
{
IWDG_ReloadCounter();·
}
delay_ms(10);
}
}
我們來看看主函數,主函數中如果我們不去喂狗,那么主函數就會延時500毫秒然后點亮,一閃而過,那么我們就設置當按鍵按下時我們就去喂狗,我們不停地喂狗,那么MCU就不會去產生復位脈沖,從而LED就會一直亮,永遠不會熄滅,我們不去喂狗了,MCU才會遞減計數到0產生復位脈沖,然后LED熄滅。我們來看看開發板是否有這樣的效果。
視頻一開始我們并沒有去喂狗,可以看看到LED一閃而過,視頻后期我們一直不停地去喂狗,LED燈常亮。停止喂狗,LED熄滅。
微信搜索公眾號“一昊”,帶給你更多精彩!
專注ARM系列單片機、51單片機、小程序、C語言、云服務器、物聯網、網頁研發、JAVA、Android/IOS APP開發等領域,專注學習過程以及經驗分享,共同學習,共同進步,不定期推送知識內容,不搬運知識,我只做知識的深加工,化繁為簡。
總結
以上是生活随笔為你收集整理的STM32独立看门狗实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么投诉保险公司能全额退保 想要全额退保
- 下一篇: CRM WebClient UI的ext