嵌入式02 STM32 实验09 独立/窗口看门狗

1、独立看门狗和窗口看门狗函数

  看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象致使死循环,或者崩溃,看门狗电路就是为了不这种状况的发生,看门狗的做用就是在必定的事件内(经过计数器实现)若没有收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)spa

  独立看门狗IWDG:独立于系统以外,由于有独立时钟30-60KHz,因此是不受系统影响的系统故障检测器,主要用于监视硬件错误。设计

  窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同。若是系统时钟不走了,这个狗也就失去了做用,主要用于监视软件错误code

2、二者区别blog

  窗口看门狗其实是设置一个窗口(上下限),这个范围内,你才容许喂狗,只要不在这个范围内,都会复位。独立看门狗只要规定的时间没到,均可以喂狗事件

  窗口看门狗计时的时间比独立看门狗精准,窗口看门狗使用的是系统时钟源。 it

3、软件设计(独立看门狗)class

子函数软件

 1 #include "iwdg.h"
 2 //时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
 3 void IWDG_Init(u8 prer, u16 rlr)
 4 {
 5     IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能对寄存器IWDG_PR和IWDG_RLR的写操做
 6     IWDG_SetPrescaler(prer);            //设置IWDG预分频值:64
 7     IWDG_SetReload(rlr);                //设置IWDG重装载值
 8     IWDG_ReloadCounter();  //按照IWDG重装载寄存器的值重装载IWDG计数器
 9     IWDG_Enable();                        //使能IWDG
10 }
11 void IWDG_Feed(void)
12 {   
13      IWDG_ReloadCounter();//reload喂狗                                           
14 }

主函数循环

 1 #include "led.h"
 2 #include "key.h"
 3 #include "delay.h"
 4 #include "sys.h"
 5 //#include "beep.h"
 6 #include "iwdg.h"
 7 
 8 int main(void)
 9 {
10     delay_init();
11     LED_Init();
12     KEY_Init();
13     //BEEP_Init();
14     delay_ms(200);
15     IWDG_Init(4,625);
16     LED0 = 0;
17     while(1)
18     {
19         if(Key_Value(0)==WK_UP_DOWN)
20         {
21             IWDG_ReloadCounter();        //喂狗
22         }
23         delay_ms(10);
24     }
25 }
相关文章
相关标签/搜索