STM32F407 獨立看門狗 個人筆記


什么是看門狗

如果程序跑飛了怎么辦?
可以用看門狗來監控。
看門狗是:
一個遞減的計數器,如果不按時給計數器賦值,計數器的值減到一定程度,就會使系統復位。
也就是說如果程序運行異常,無法正常給計數器賦值(喂狗),系統會自動復位。
STM32F407有兩種看門狗:

  1. 獨立看門狗
  2. 窗口看門狗

獨立看門狗

  • 在鍵值寄存器(IWDG_KR)中寫入0xCCCC:開始啟用獨立看門狗。
  • 此時計數器開始遞減
  • 當計數器值計數到尾值0x000時會產生一個復位信號(IWDG_RESET)。
  • 無論何時,只要在鍵值寄存器IWDG_KR中寫入0xAAAA(通常說的喂狗),
  • 自動重裝載寄存器IWDG_RLR的值就會重新加載到計數器,從而避免看門狗復位。
  • 如果程序異常,就無法正常喂狗,從而系統復位。

獨立看門狗時鍾接線圖

  • 時鍾源是頻率為32K的LSI(low speed internal 時鍾),經過預分頻寄存器的值分頻后,即為獨立看門狗的計數器的頻率。
  • 預分頻寄存器IWDG_PR和鍵值寄存器IWDG_KR都有寫保護功能,要操作他們需要先取消寫保護。

獨立看門狗時間計算

如何計算超時時間,即獨立看門狗多久不喂會復位?
下圖適用與M4:


由圖可知
分頻系數 = (2^PR寄存器的值)×4

∴超時時間= 周期×初值
=(分頻系數/32K)× rlr
=(2^PR寄存器的值)×4 ×rlr

獨立看門狗適用場合

  • 獨立看門狗(IWDG)由專用的低速時鍾(LSI)驅動,即使主時鍾發生故障它仍有效。
  • 獨立看門狗適合應用於需要看門狗作為一個在主程序之外 能夠完全獨立工作,並且對時間精度要求低的場合。

獨立看門狗代碼寫法

#include "iwdg.h"
	  
////////////////////////////////////////////////////////////////////////////////// 

//初始化獨立看門狗
//prer:分頻數:0~7(只有低3位有效!)
//rlr:自動重裝載值,0~0XFFF.
//分頻因子=4*2^prer.但最大值只能是256!
//rlr:重裝載寄存器值:低11位有效.
//時間計算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{
	//1.取消寄存器寫保護:0x5555使能
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能對IWDG->PR IWDG->RLR的寫
	
	//2. 設置IWDG分頻系數:寫PR
	IWDG_SetPrescaler(prer); 
	
	//3. 設置IWDG裝載值
	IWDG_SetReload(rlr);   

	//4. 喂狗:寫0xAAAA到KR,賦初值
	IWDG_ReloadCounter(); //reload
	
	//5. 使能看門狗:寫0xCCCC到KR
	IWDG_Enable();       
}

//喂獨立看門狗
void IWDG_Feed(void)
{
	IWDG_ReloadCounter();//喂狗:寫0xAAAA到KR
}


免責聲明!

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



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