天天看点

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 与板子接线测试效果良好,独立看门狗效果良好。