STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)

一     前沿废语:



  之前有很风靡的游戏,名字叫《看门狗》。该游戏用了很新的引擎技术,打造出了一个辽阔庞大的世界,内容是玩家Aiden·Pearce(主角)是一名精通黑客技术的高手,当时的世界是处于所有物品都被置了电子设备控制,整个城市都在依赖着他们,主人公决定利用自己的技术为这个世界惩奸除恶。

    

    这个游戏以极高的自由度、出色的游戏质量与丰富的游戏内容被业界公认为开启次世代游戏的大门之作,该游戏被IGN评为年度最佳射击游戏(下载地址:http://down.ali213.net/pcgame/WatchDogs.html  有机会一定玩玩。)

二     开门见山:



    下面言归正传,在工作中用的STM32需要使用看门狗技术:

     看门狗通俗解释:

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

三   庐山面目:



    STM32芯片一共有两个看门狗,一个是独立看门狗(IWDG),另一个是窗体看门狗(WWDG)

    ①先来讲讲独立看门狗:

STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然
          有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是
          在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看
          门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

      独立看门狗的配置工作代码:   

 1 void IWDG_Init(u8 prer,u16 rlr)
 2 {
 3    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //①使能对寄存器 I 写操作
 4    IWDG_SetPrescaler(prer); //②设置 IWDG 预分频值:设置 IWDG 预分频值
 5    IWDG_SetReload(rlr); //②设置 IWDG 重装载值
 6    IWDG_ReloadCounter(); //③按照 IWDG 重装载寄存器的值重装载 IWDG 计数器
 7    IWDG_Enable(); //④使能 IWDG
 8 }
 9 //喂独立看门狗
10 void IWDG_Feed(void)
11 {
12    IWDG_ReloadCounter();//reload
13 }

主逻辑区代码:

 1 delay_init();//延时函数初始化
 2 NVIC_Configuration(); //设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级
 3 KEY_Init(); //按键初始化
 4 IWDG_Init(4,625); //与分频数为 64,重载值为 625,溢出时间为 1s
 5 while(1)
 6 {
 7     if(KEY_Scan(0)==KEY_UP)
 8     {
 9         IWDG_Feed(); //如果 按键按下,则喂狗
10     }
11     delay_ms(10);
12 }       

程序的功能就是通过按键打开看门狗,当看门狗被触发之后执行相应的操作。

②再来看看窗体看门狗

窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序
背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG->CR 的第六位)
变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数
器达到窗口配置寄存器(WWDG->CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)
被刷新, 那么也将产生一个 MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷
新。

看门狗时间计算公式:

窗口看门狗的超时公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
Twwdg:WWDG 超时时间(单位为 ms)
Fpclk1:APB1 的时钟频率(单位为 Khz)
WDGTB:WWDG 的预分频系数
T[5:0]:窗口看门狗的计数器低 6 位

 1 void WWDG_Init(u8 tr,u8 wr,u32 fprer)
 2 {
 3     RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能
 4     WWDG_CNT=tr&WWDG_CNT; //初始化 WWDG_CNT.
 5     WWDG_SetPrescaler(fprer); //设置 IWDG 预分频值
 6     WWDG_SetWindowValue(wr); //设置窗口值
 7     WWDG_Enable(WWDG_CNT);
 8     //使能看门狗,设置 counter
 9     WWDG_ClearFlag(); //清除提前唤醒中断标志位
10     WWDG_NVIC_Init(); //初始化窗口看门狗 NVIC
11     WWDG_EnableIT(); //开启窗口看门狗中断
12 }
13 //重设置 WWDG 计数器的值
14 void WWDG_Set_Counter(u8 cnt)
15 {
16     WWDG_Enable(cnt); //使能看门狗,设置 counter .
17 }
18 //窗口看门狗中断服务程序
19 void WWDG_NVIC_Init()
20 {
21     NVIC_InitTypeDef NVIC_InitStructure;
22     NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG 中断
23     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占 2 子优先级 3 组 2
24     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占 2,子优先级 3,组 2
25     NVIC_Init(&NVIC_InitStructure); //NVIC 初始化
26 }
27 void WWDG_IRQHandler(void)
28 {
29     WWDG_SetCounter(WWDG_CNT);
30     //当禁掉此句后,窗口看门狗将产生复位
31     WWDG_ClearFlag();
32     //清除提前唤醒中断标志位
33     LED1=!LED1;
34     //LED 状态翻转
35 }

主逻辑区代码:

 1 int main(void)
 2 {
 3     delay_init();//延时函数初始化
 4     NVIC_Configuration(); //设置 NVIC 中断分组 2
 5     usart1_init();串口1初始化
 6     LED_Init(); //LED 初始化
 7     KEY_Init(); //按键初始化
 8     LED0=0;
 9     delay_ms(500);
10     WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//计数器值为 7f,窗口寄存器为 5f,//分频数为 8
11     while(1)
12     {
13         LED0=1;
14     }
15 }    

功能:

通过 LED0(DS0)来指示是否正在初始化。而 LED1(DS1)用来指示是否发生了中
断。我们先让 LED0 亮 300ms,然后关闭以用于判断是否有复位发生了。在初始化 WWDG 之
后,我们回到死循环,关闭 LED1,并等待看门狗中断的触发/复位。

四   泛泛而谈:



再来分析一下独立看门狗(IWDG)和窗体看门狗(WWDG)的区别:

(1)独立看门狗没有中断,窗口看门狗有中断

(2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制

(3)独立看门狗只有下限,窗口看门狗又下限和上限

(4)独立看门狗是12位递减的。窗口看门狗是7位递减的

(5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR

End!

欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群:  嵌入式交流群
时间: 2024-12-08 10:55:14

STM32之------独立看门狗(IWDG)和窗体看门狗(WWDG)的相关文章

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

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

STM32的独立看门狗

STM32 内 部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG) STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然 有效.这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是 在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看 门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的. 首先我们得讲解一下看门狗的原理.这个百度百科里面有很详细

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

一.独立看门狗和窗口看门狗 看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象导致死循环,或者崩溃,看门狗电路就是为了避免这种情况的发生,看门狗的作用就是在一定的事件内(通过计数器实现)若没有收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号) 独立看门狗IWDG:独立于系统之外,因为有独立时钟30-60KHz,所以是不受系统影响的系统故障检测器,主要用于监视硬件错误. 窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同.如果系统时钟不走了,这个狗也就失去了作用

STM8S awu及看门狗IWDG WWDG应用(转)

源:STM8S awu及看门狗IWDG WWDG应用 AWU的应用(用库函数完成的) //切记要开启中断 且在中断函数中 AWU_GetFlagStatus(); 来清除中断 void AWU_SET(void) { CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, ENABLE); AWU_Init(AWU_TIMEBASE_12S); } #ifdef _COSMIC_ @far @interrupt void AWU_IRQHandler(void

     【原创】浅谈安全狗原理,不启动安全狗使用防火墙  

最近两天在服务器装了安全狗,由于服务器并没有注册系统服务,所以安全狗一直不起作用 后来注册了apache2a. 把安全狗装好了,然后测试了一***入 说明成功了.但是重启之后apache服务又没了,于是我就纠结,看了一下apache的配置文件: 发现 底部多了如下三行代码: #Begin SafeDogSite-ApacheFilter edits - remove only on uninstall Include "f:/jspstudy/apache/conf/SafeDogSiteApa

stm32 独立看门狗IWDG

http://note.youdao.com/noteshare?id=7e77f1eab55fd08573e82e550e186ccf&sub=44D0C7BCB7094D4D92D5C71128CFA0F0 文章在有道云里. 原文地址:https://www.cnblogs.com/coversky/p/8452624.html

独立看门狗 IWDG

一,独立看门狗 二,独立看门狗的时钟源 独立看门狗拥有自己的时钟源,不依赖PLL时钟输出的分频信号,能够独立运行,这样子的好处就是PLL假如受到干扰, 导致运行异常,独立的看门狗还能正常地进行工作,如果没有正常的喂狗动作,就复位CPU. 三.程序设计 1.     添加复位检测代码,有助于观察当前工作的可靠性 /* Check if the system has resumed from IWDG reset,检查当前复位是否有独立看门狗导致 */ if (RCC_GetFlagStatus(R

服务器虚拟化识别USB加密狗ukey动态迁移加密狗解决方案

服务器虚拟机识别USB加密狗方案 传统方案 1):硬件狗直连服务器 1.1):虚拟化无法读取USB接口 1.2):使用Vmvare飘移技术后无法使用硬件狗 1.3):刀片服务器USB口少,无法直连硬件狗 2):USB-Over-Network 2.1):需要单独使用PC机或者服务器,浪费设备,并且占用机房空间 2.2):使用过的同事反馈使用中稳定性差 2.3):USB接口有限,扩展需要加HUB,导致稳定性会更差 硬件方案 1):使用USB-SERVER硬件设备 1.1):根据不同的型号,端口数量

流浪狗救弃婴人比狗更可怜 网友:狗的伟大人的悲哀

2015年11月3日讯,日前,流浪狗叼弃婴求援的照片在网络走红,一只流浪狗在垃圾堆里发现一名刚出生的弃婴,流浪狗叼弃婴求援,住户发现后立即将婴儿送医治疗,但目前婴儿尚未脱离险境,身分也有待查证. http://sn.shskin.cn/sncs/6639.html http://sn.shskin.cn/sncs/6640.html http://sn.shskin.cn/sncs/6641.html 一只流浪狗叼着刚出生的小婴儿向邻近住户求救,如此暖心的行为让不少网友纷纷大赞狗狗果真是人类最好