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


    一、独立看门狗和窗口看门狗

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

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

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

    二、两者区别

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

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

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

    子函数

     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 }
  • 相关阅读:
    记一次 contentInsetAdjustmentBehavior 引发的bug
    Android埋点技术概览
    Android开发快速入门iOS开发概览
    工作项目遇到的一些问题
    ruby操作项目.xcodeproj
    关于performSelector afterDelay:0 的使用
    谷歌Python代码风格指南 中文翻译
    最大子矩阵问题--悬线法dp
    tarjan
    SDU CSPT3模拟
  • 原文地址:https://www.cnblogs.com/ksht-wdyx/p/11652535.html
Copyright © 2020-2023  润新知