stm32stm32 硬件独立看门狗狗和窗口看门狗的区别

【转载】如何使用STM32的窗口看门狗
来源:博客园
STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值在WWDG_CFR寄存器定义 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。 WWDG 与IWDG的主要区别是有一个窗口控制,WWDG的中断是给你最后一次喂狗的机会,通常这个中断不是让你执行喂狗操作的;一般进到这个中断时表示你在其它地方安排的喂狗操作不能奏效,而发生这种现象时,肯定是系统有问题了,或者是程序有Bug,或者是碰到了干扰,在这种情况下,这个中断是为了让你的程序在发生真正的看门狗复位前,有一个紧急处理的机会,如保存重要的数据,或做系统刹车等操作。 由此看出,简单地在WWDG中断喂狗,既没有发挥WWDG相对于IWDG的优势,又因为在中断中喂狗而为以后的产品留下了隐患。 注:通常的看门狗与STM32的IWDG特点是一样的。 来自: /BLOG_STM32_199055.HTM
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动现在的位置:
【STM32视频教程】第八课 独立、窗口看门狗和备份域
第八课 独立、窗口看门狗和备份域
讲解内容概要:
一、IWDG介绍
二、IWDG功能
三、WWDG介绍
四、WWDG功能
五、BKP介绍
六、BKP主要特性
七、侵入检测
【上篇】【下篇】
您可能还会对这些文章感兴趣!
您必须才能发表留言!STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
我们的实验这样设计,主函数开始的时候,向串口输出“Hello World”,然后启动看门口(溢出时间设定为3秒钟)。在按下按键的时候喂狗,同时串口打印“喂狗”。
预期结果:如果不按按键,则约每三秒重启一次,现象是串口隔三秒就会打印“Hello World”;如果在启动后的3秒内按键,则显示“喂狗”,再在3秒内按键……这样保证不重启。
看一下代码吧。
独立看门狗的初始化:
void IWDG_Init(u8 prer,u16 rlr)
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//使能对寄存器 IWDG_PR 和 IWDG_RLR的写操作
IWDG_SetPrescaler(prer);
//设置预分频值
IWDG_SetReload(rlr);
//设置重装载值
IWDG_ReloadCounter();
//按照重装载值装载IWDG计数器
IWDG_Enable();
//看门狗使能
}这个函数有两个参数:prer 和 rlr
PRER 就是表格中的PR[2:0],取值范围是0-7;
RLR就是表格中的RL[11:0],取值范围是0x000-0xFFF;
注意:这里的时间是粗略计算的,不是那么准确。
溢出时间 =&2^PR*(RL+1)/10 &
如果我们定时3秒钟,那么应该是:
IWDG_Init(4,1874); &// 2^4 * () / 10 (ms)= 16*1875/10 (ms)= 3000(ms) = 3s
主函数代码:
int main(void)
delay_init();
//延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(9600);
//串口初始化
printf(&Hello World ! \r\n&);
IWDG_Init(4,1874);
// 看门狗初始化并使能
key_init();
//按键IO初始化
EXTIX_Init(); // 按键中断初始化
喂狗的操作是:
void IWDG_Feed(void)
IWDG_ReloadCounter();//reload
我们在按键中断处理中喂狗:
void EXTI0_IRQHandler(void)
delay_ms(10);
//消除抖动
if(KEY3==1)
printf(&喂狗......\r\n&);
IWDG_Feed();
EXTI_ClearITPendingBit(EXTI_Line0); //清除中断标志位
实验结果如图。
如果不喂狗,那么大约3秒钟就会重启。
如果喂狗,效果如下。
阅读(...) 评论()STM32 学习笔记之独立看门狗
我的图书馆
STM32 学习笔记之独立看门狗
STM32 学习笔记之独立看门狗
& &STM32F10x系列内置有两个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。
& &独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。但是,独立看门狗的时钟并不是准确的40Khz,而是在30~60Khz之间变化的一个时钟。
& & 使用独立看门狗我们需要用到几个寄存器:
& & 1)键寄存器(IWDG_KR),在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从复位值0xFFF递减计数。当计数器计数到末尾0x00时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR总被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。
& & 2)预分频寄存器(IWDG_PR),低3位有效,具有写保护功能。要改变预分频因子,I状态寄存器(WDG_SR)的PVU位必须为0.
& & 3)重装载寄存器(IWDG_RLR)低12位有效,具有写保护功能。每当向键寄存器(IWDG_KR)写入0xAAAA时,重装载值会被传送到计数器中,随后计数器从这个值开始递减计数。
& & &启动独立看门狗需要进行一下操作:
& & 1)向键寄存器(IWDG_KR)写入0x5555,通过写入值取消预分频寄存器(IWDG_PR)和重装载寄存器(IWDG_RLR)的写保护。喂狗时间:Tout=40Khz/(4*2^prer)*rlr)
& & 2)向键寄存器(IWDG_KR)写入0xAAAA,是STM32重新加载IWDG_RLR的值到看门狗计数器里面。
& & 3)向键寄存器(IWDG_KR)写入0xCCCC,启动STM32的看门狗。
参考程序:
/***************************************************************************************
****************************************************************************************
* Description : Init Independent watchdog&
&prer:Prescaler : 0~7 & (the last 3 bit are effective)
&Division factor=4*2^prer. &=256
&rlr::IWGD_RLR: low 12 bit are effective
&Time calculate: &Tout=40K/((4*2^prer)*rlr)
* Study STM32 record.
* History:
& & & & & LED0 & & & & & & PB.0
& & & & & KEY01 & & & & & PB.5
& & & & &&KEY00 & & & & & PB.4
&KEY10 & & & & & PC.10
Name & & &
Description
& & & &1.0 & & & & & & & & &Penny
****************************************************************************************
****************************************************************************************/&
#include "ms5.h"
void IWDG_Init(u8 prer, u16 rlr)
IWDG-&KR=0x5555; & & & //使能预分频寄存器IWDG-&PR 和重装载寄存器IWDG-&RLR写功能
IWDG-&PR= & & & & //设置预分频值: LSI/32=40Khz/4*2^pre
IWDG-&RLR= & & & & &//设置重加载值: 重加载寄存器IWDG-&RLR
IWDG-&KR=0xAAAA; & &//按照IWDG重装载寄存器的值重装载IWDG计数器
IWDG-&KR=0xCCCC; & &//使能看门狗
//喂独立看门狗
void IWDG_Feed(void)
IWDG-&KR=0xAAAA; & & &//reload
发表评论:
馆藏&21260
TA的最新馆藏关于初始化窗口看门狗几句代码的顺序造成不同的结果的疑问_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:21,329贴子:
关于初始化窗口看门狗几句代码的顺序造成不同的结果的疑问收藏
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 stm32独立看门狗 的文章

 

随机推荐