1. 程式人生 > >ARM開發(7)基於STM32的獨立看門狗

ARM開發(7)基於STM32的獨立看門狗

             基於STM32的獨立看門狗

一 獨立看門狗原理:

1.1 本實驗實現STM32的獨立看門狗
1.2 實驗思路:理解STM32獨立看門狗原理,根據其原理寫驅動。
1.3 開發環境 : MDK5 庫函式版本開發 JLINK模擬 

二 實驗步驟:
2.1 wdg.h程式碼:

#ifndef __WDG_H
#define __WDG_H
#include "sys.h"
void IWDG_Init(u8 prer,u16 rlr); //獨立看門狗初始化
void IWDG_Feed(void);  //喂狗
#endif

2.2 wdg.c程式碼(獨立看門狗初始化與喂狗):

 #include "wdg.h"
/*初始化獨立看門狗
prer:分頻數:0~7(只有低3位有效!)
分頻因子=4*2^prer.但最大值只能是256!
rlr:重灌載暫存器值:低11位有效.
時間計算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
*/
void IWDG_Init(u8 prer,u16 rlr) 
{   
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能對暫存器IWDG_PR和IWDG_RLR的寫操作
    IWDG_SetPrescaler(prer);  //設定IWDG預分頻值;
    IWDG_SetReload(rlr);  //設定IWDG重灌載值
    IWDG_ReloadCounter();  //按照IWDG重灌載暫存器的值重灌載IWDG計數器
    IWDG_Enable();  //使能IWDG
}
//喂獨立看門狗
void IWDG_Feed(void)
{   
    IWDG_ReloadCounter();//reload                                          
}

2.2 main.c程式碼(實現獨立看門狗,蜂鳴器檢測效果):

#include "beep.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "wdg.h"
 int main(void)
 {      
    delay_init();            // 延時 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設定NVIC中斷分組2 
    BEEP_Init();//蜂鳴器初始化
    KEY_Init(); //按鍵初始化
    delay_ms(500);       //延時
    IWDG_Init(4,625);    //  讀立看門狗設定 
    BEEP =1;             //蜂鳴器響
    while(1)
    {
        if(KEY_Scan()==8)
        {
            IWDG_Feed();//當矩陣鍵盤按鍵8時,不會產生復位
        }
        delay_ms(10);
    };   
}

三 接線測試:

3.1 與板子接線測試效果良好,獨立看門狗效果良好。