嵌入式 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 }

原文地址:https://www.cnblogs.com/ksht-wdyx/p/11652535.html

时间: 2024-10-05 05:21:57

嵌入式 02 STM32 09 独立/窗口看门狗实验的相关文章

cortex_m3_stm32嵌入式学习笔记(六):窗口看门狗实验(WWDG)

窗口看门狗( WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障. 简单来说,和IWDG的区别就是IWDG要靠手动去喂狗,而WWDG有内置中断,所以可以利用设置中断服务函数去喂狗 首先还是设置WWDG (记得往工程里面添加头文件)大致设置步骤如下: 1)使能 WWDG 时钟(系统内部时钟) 2)设置窗口值和分频数 3)开启 WWDG 中断并分组 4) 设置计数器初始值并使能看门狗 5) 编写中断服务函数 wwdg.c #include "led

STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生.看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) . 在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗:此时计数器开始从其复位值 0xFFF 递减计数.当计数器计

cortex_m3_stm32嵌入式学习笔记(七):独立看门狗&窗口看门狗

总结一下这两种狗吧... 1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的.窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟APB1ENR(系统时钟要是挂了就完了) 独立看门狗Iwdg--独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器.主要用于监视硬件错误.

独立看门狗和窗口看门狗

独立看门狗没几个寄存器. 1.IWDG_KR,写入0xcccc,启动看门狗.计数器开始从复位值 0xFFF 递减计数.当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)2.任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位.写入键值 5555h 可使能对 IWDG_PR 和 IWDG_RLR 寄存器的访问.3.这个看门狗的时钟源是LSI,IWDG_PR寄存器是这个看门狗时钟的分频设置. 没

STM8S103 独立看门狗和窗口看门狗

独立看门狗时钟来源为LSI:窗口看门狗时钟来源为CPU: 窗口看门狗窗口的含义是:喂狗必须在一定的窗口期内完成,不能过早也不能过晚. 总结:防止程序复位,用独立看门狗.

STM32的两只看门狗

STM32独立看门狗, 由专门的低速时钟(LSI)驱动,即便是主时钟发生故障它仍能够有效,所以此狗狗可以工作在与主时钟无关的要求下,或者待机模块下等,所以它叫独立看门狗,注意一旦开启此看门狗则只能由MCU复位后才清除,让它不再工作. 它的时钟是一个内部RC时钟,它会在30KHZ到60KHZ之间变化,并非是精确的40KHZ,而只是一般计算时取40KHZ. 独立看门狗需设置四个寄存器如下: 其中, 预分频寄存器(IWDG_PR),最低三位PR[2:0](Prescaler divider)有效,可设

STM8s窗口看门狗

看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号: 2 当寄存器WDGCR的值大于WDGWR的时候写WDGCR寄存器会产生复位信号: 解释: WDGCR的最高位WDGA是开启看门狗的(WDGA=1开启),当然如果开启了硬件看门狗这个位就没用了.硬件看门狗在OPTION BYTES里设置. WDGCR的低六位是计数用的从图里可以得出这个计数器的时钟是fCPU时钟分频得来的.这个分频值固定是122

窗口看门狗

<!doctype html>窗口看门狗 html { } :root { } html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif } body { margin: 0px; padding: 0px; height: auto; bott

STM32之窗口看门狗

1.有个7位递减计数器(WWDG->CR),就这个计数器和窗口计数器(WWDG->CFR)决定什么时候喂狗.狗喂早了,复位--"早"体现在 计数器值(tr)>窗口值(wr),也就是计数器值还没有减到窗口值以下: 2.当 0x40 < 计数器值(tr) < 窗口值(wr) 时,这时候最适合喂狗了,也只有在这时候喂狗才合适: 3.当 计数器的值 从0x40变到0x3F的时候,将产生看门狗复位:当然在要产生复位的前一段时间,如果开启了提前唤醒中断,那么就会进入中