STM32之獨立看門狗 學習筆記

一、獨立看門狗概述:

             獨立看門狗其實就是一個獨立於主時鐘的定時復位狗。一旦開啓獨立看門狗,它就會根據自己設定的時間不斷倒數,倒數到0後就開始復位。

二、關於喂狗:

              喂狗就是讓狗去吃東西,分心後,這隻狗就得重新倒數。

三、stm32看門狗示例程序:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"


 

void IWDG_Init(u8 prer,u16 rlr) 
{	
 	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能對寄存器IWDG_PR和IWDG_RLR的寫操作
	
	IWDG_SetPrescaler(prer);                      //設置IWDG預分頻值:設置IWDG預分頻值爲64
	
	IWDG_SetReload(rlr);                         //設置IWDG重裝載值
	
	IWDG_ReloadCounter();                       //按照IWDG重裝載寄存器的值重裝載IWDG計數器
	
	IWDG_Enable();                             //使能IWDG
}


 int main(void)
 {	 
   //延時函數初始化		
	delay_init()
   //設置NVIC中斷分組2:2位搶佔優先級,2位響應優先級        
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 
   //初始化與LED連接的硬件接口
 	LED_Init();		
   //按鍵初始化	   	                               
	KEY_Init();                                       
	delay_ms(500); 
  //與分頻數爲64,重載值爲625,溢出時間爲1s	     	                          
	IWDG_Init(4,625);  
   //點亮LED0                             
	LED0=0;				                           
	 

	while(1)
	{
		if(KEY_Scan(0)==WKUP_PRES)
		{
		IWDG_ReloadCounter();                 //如果WK_UP按下,則喂狗
		}
	} 
}
  

從主程序main的第一行開始運行到下面的代碼時,開啓看門狗

  //與分頻數爲64,重載值爲625,溢出時間爲1s	     	                          
 IWDG_Init(4,625); 

  此時,鍵值寄存器(IWDG_KR)中寫入 0xCCCC,開始啓用獨立看門狗;此時計數器開始從其復位值 0xFFF 遞減計數。當計數器計數到末尾 0x000 時,會產生一個復位信號(IWDG_RESET)。

所以我們會看到等一亮一滅。

 

  此時,如果檢測到按鍵按下,那麼就會運行喂狗程序:

if(KEY_Scan(0)==WKUP_PRES)
		{
		IWDG_ReloadCounter();                 //如果WK_UP按下,則喂狗
		}

  喂狗後, 鍵寄存器 IWDG_KR 中被寫入 0xAAAA, IWDG_RLR 中的值就會被重新加載到計數器,也就是對應到初始化設置的計數值,我們設置的1S,那麼計數器就將重1s處開始遞減,如果我們持續按按鍵,那麼計數器就會持續保持在那個值,不會倒數到0,也就不會產生復位,那麼燈就會始終保持亮的狀態。

從而驗證了看門狗和喂狗的功能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章