工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。 所以在使用有看门狗的芯片时要注意清看门狗。 软件、硬件看门狗的主要异同 两者相同点如下: 1) 都是通过定时器实现;定时时间到没有喂狗就进行复位。 2) 都是需要在规定的时间内喂狗。 3) 两者都是靠软件进行喂狗。 2) 屏蔽方法:软件看门狗很容易屏蔽关闭,只需修改其中的寄存器,而硬件看门狗一旦启动不断电就停不下来。 3) 启动方式:软件看门狗很容易启动,只需修改其中的寄存器。 软件和硬件的看门狗的最主要差异在于开启看门狗的时机,软件看门狗必须初始化(配置)看门狗才能使用,如果软件看门狗是厂商提供的SDK中的一个API接口,开发者又没有能力修改底层的uboot、内核,无法在uboot
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。 图1 窗口看门狗的 上窗口就是配置寄存器WWDG->CFR里设定的W[6:0]; 下窗口是固定的0x40; 当窗口看门狗的计数器在上窗口值之外,或是低于下窗口值都会产生复位。 && 窗口看门狗的时钟来自于PCLK1,在时钟配置中,其频率为外部时钟经倍频器后的二分频时钟,即为36MHz,根据手册可以知道其定时时间计算方法: 上窗口时间:T_min = 4096 * (2^WDGTB 重载,每次重载一次计数值LED2就闪烁一次。 Priority and 2 bits for Sub Priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel
在正式的产品开发中,软件中要加入看门狗,以确保系统安全和软件跑飞后可以复位到安全状态,最近一直在用NXP的K64,所以今天就以K64为例来说明,软件看门狗的使用。 别忘了使能,其中比较重要的一点是配置时钟和看门狗定时器的值,从上图中就可以看出K64的看门狗模块由两种时钟可选,我比较喜欢用LPO时钟1kHz。 这样计算看门狗时间例如为2秒的喂狗周期,则timeoutValue 应为2000,如下图所示: ? 如果由多任务还要考虑在多个地方清狗。 喂狗可以直接使用SDK的喂狗函数 ? 测试的时候我们可以注释掉清狗程序,在程序复位的地方打断点,那么超过两秒(根据实际修改,我设置的2秒),并观察复位计数器就可以测试你的狗是否正常运行。 下载程序,打断点,观察复位计数器这时候为零, ? 注释掉喂狗程序和注释掉清狗程序一样都会引起复位,且测试方法相同,至此验证了我们的软件看门狗功能符合设计需求。
看门狗机制,博客从原理、分类、实现到注意事项全面覆盖,符合技术文档的规范性和实用性要求。 看门狗机制的核心原理 看门狗是一种用于监控系统运行状态的硬件或软件机制。 若系统未在规定时间内响应,看门狗会触发复位信号,强制系统重启以恢复稳定状态。 窗口看门狗的特点与应用 窗口看门狗要求系统必须在预设的时间窗口内完成定时器重置操作。 以下是一个窗口看门狗的伪代码逻辑示例: while (system_running) { if (current_time > reset_window_max || current_time < reset_window_min) { trigger_reset(); } feed_watchdog(); // 重置看门狗定时器 } 独立看门狗的特性与实现 独立看门狗通过固定超时周期工作 硬件/软件选择:硬件看门狗抗干扰能力强,软件看门狗灵活性高。 常见问题与解决方案 误复位:检查任务调度是否阻塞喂狗操作。 看门狗失效:验证硬件连接或软件初始化代码。
这在库函数中的实现函数是: IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 2)设置独立看门狗的预分频系数和重装载值 设置看门狗的分频系数的函数是: void _t Reload); //设置 IWDG 重装载值 设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间) ,该时间的计算方式为: Tout=((4×2^prer /** * 初始化独立看门狗 * prer:分频数:0~7(只有低 3 位有效!) * 分频因子=4*2^prer.但最大值只能是 256! . * 时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms). */ void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd( . */ /** * 初始化窗口看门狗 * tr :T[6:0],计数器值 * wr :W[6:0],窗口值 * fprer:分频系数(WDGTB),仅最低2位有效 * Fwwdg=PCLK1/(4096
本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil IWDG-独立看门狗 工程创建 1设置RCC 设置高速外部时钟HSE 选择外部时钟源 2配置IWDG IWDG时钟预分频系数 4分频 计数器重装载值 4095 RLR 超出(溢出 值: 3时钟源设置 1选择外部时钟HSE 8MHz 2PLL锁相环倍频72倍 3系统时钟来源选择为PLL 4设置APB1分频器为 /2 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟 1计数器的初始值 2 是我们设置的上窗口(W[6:0]值 3是下窗口值(0x3F) 窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗 窗口看门狗中断: 并且窗口看门狗还可以使能中断 点击WWDG 2.
这在库函数中的实现函数是: IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 2)设置独立看门狗的预分频系数和重装载值 设置看门狗的分频系数的函数是: void _t Reload); //设置 IWDG 重装载值 设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间) ,该时间的计算方式为: Tout=((4×2^prer /** * 初始化独立看门狗 * prer:分频数:0~7(只有低 3 位有效!) * 分频因子=4*2^prer.但最大值只能是 256! . * 时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms). */ void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd( . */ /** * 初始化窗口看门狗 * tr :T[6:0],计数器值 * wr :W[6:0],窗口值 * fprer:分频系数(WDGTB),仅最低2位有效 * Fwwdg=PCLK1/(4096
int watchWaitingTime = 20;
///
这在库函数中的实现函数是: IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 2)设置独立看门狗的预分频系数和重装载值 设置看门狗的分频系数的函数是: void _t Reload); //设置 IWDG 重装载值 设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间) ,该时间的计算方式为: Tout=((4×2^prer /** * 初始化独立看门狗 * prer:分频数:0~7(只有低 3 位有效!) * 分频因子=4*2^prer.但最大值只能是 256! . * 时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms). */ void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd( . */ /** * 初始化窗口看门狗 * tr :T[6:0],计数器值 * wr :W[6:0],窗口值 * fprer:分频系数(WDGTB),仅最低2位有效 * Fwwdg=PCLK1/(4096
为了避免应用陷入错误状态导致界面无响应,Apple 设计了看门狗 (WatchDog) 机制。一旦超时,强制杀死进程。 8badf00d = ate bad food,大概是在说看门狗吃了坏的食物所以暴走了?!异常记录则表示这并不是一次崩溃(邪魅一笑:强制退出而已)。信息一栏指出时间限制为 20 s。 同步网络请求,主线程,超长超时时间,满足这三点,一定场景下几乎必然会触发看门狗机制。 对策 合理解决方案: 异步网络请求:优点很多,最重要的是可以让你无忧无虑安全地访问网络,而无需担心线程。 此外,一部分情况下,例如这次遇到登录和模版同步时触发看门狗,事实上,即使在运用到模版时再次请求也是勉强可行的,因此姑且先跳过网络请求也可以。 应用的网络部分基于公司的通用框架,因此优先考虑在非主线程中进行网络请求来避免触发看门狗。 至于调试模式下为什么可以正常启动应用,完全是因为该模式下看门狗机制处于禁用状态。
/*此程序实现单片机”看门狗”WDT的功能*/ #include”p18f458.h” unsignedlongi; /*系统初始化子程序*/ voidinitial() { TRISD = 0X00 0X00;/*D口送00H,发光二极管亮*/ DELAY();/*给予一定时间的延时*/ PORTD = 0XFF;/*D口送FFH,发光二极管灭*/ while(1) { ; }/*死循环,等待看门狗溢出复位 */ } ——————-汇编语言版本的单片机看门狗程序—————- ;此程序实现”看门狗”WDT的功能 ;此单片机看门狗由http://www.51hei.com独家提供 LISTP=18F458 INCLUDE **********延时子程序************************** DELAY MOVLW0XFF MOVWFDEYH AGAIN1 MOVLW0XFF MOVWFDEYL AGAIN2 DECFSZDEYL GOTOAGAIN2 DECFSZDEYH GOTOAGAIN1 NOP RETURN ;************单片机看门狗主程序************************
瑞萨R2E1 瑞萨R2E1的看门狗模块包括2个32位计数器, CNT 和 RST。CNT 计数器用于记录内部时钟计数, RST 计数器用于记录看门狗超时时间。 这个复位可以参考:单片机——复位操作详述 瑞萨R2E1看门狗模块的主要特点如下: 精度高:R2E1 的看门狗模块精度高,超时时间可设置为 0.16 秒到 8192 秒,同时还支持极精准的微秒级超时时间 配置灵活:R2E1 看门狗模块具有多种配置模式,支持溢出、时间窗口等模式选择,并且在不同模式下还可设置不同的超时时间。 低功耗:R2E1 看门狗模块具有低功耗特性,可以有效地提高系统电量使用效率。 值得注意的是,看门狗模块虽然可以保护系统运行,防止死机现象,但也可能带来一定的安全风险。 代码实现 #include "r2e1.h" WDT.WTCNT = WDT_CNT_VALUE; //设置看门狗计数值 WDT.WTCSR.BIT.OVFINT = 0; //禁止溢出中断
目录 1、IWDG 1.1 独立看门狗简介 1.2 独立看门狗的特点 1.3 独立看门狗功能描述 1.4 硬件看门狗 1.5 寄存器访问保护 1.6 调试模式 2、WWDG 2.1 简介 2.2 窗口看门狗主要特点 2.3 窗口看门狗功能说明 2.4 如何设置看门狗超时 2.5 调试模式 3、区别 1、IWDG 1.1 独立看门狗简介 IWDG(Independent watchdog)独立看门狗,可以用来检测并解决由于软件错误导致的故障 2、WWDG 2.1 简介 窗口看门狗(Window watchdog)通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 1/24000*4096*2*2*2*(63+1)= 24.85ms 有关 TWWDG 的最小值和最大值 2.5 调试模式 当微控制器进入调试模式时( Cortex™-M3内核停止),WWDG计数器会根据 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了; 如果使用窗口看门狗
如果程序异常,就无法正常喂狗,从而系统复位 独立看门狗框图 键值寄存器IWDG_KR:0~15位有效 预分频寄存器IWDG_PR:0~2位有效。 独立看门狗超出时间 溢出时间计算 Tout = ( ( 4 * 2^prer )rlr)/40(M3) Tout公式是最终的式子,要弄清楚式子中的各成员的含义,就要从根源开始推倒和理解。 根据手册中该寄存器的配置关系是:000对应4分频,001对应8分频,010对应16分频…由此得出预分频因子与prer的值关系是:预分频因子=4*2prer=2(prer+2)。 所以Tout=rlr看门狗时钟周期=rlr(1/freq)=rlr*(1/(40预分频系数))=rlr(1/(40/预分频因子))=rlr*(1/(40/(42prer)))=rlr*((2(prer+ (); 2.设置独立看门狗的预分频系数,确定时钟 IWDG_SetPrescaler(); 3.设置看门狗重装载值,确定溢出时间 IWDG_SetReload(); 3.设置看门狗重装载值,确定溢出时间
IWDG_Init(u8 prer,u16 rlr) 2 { 3 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //①使能对寄存器 I 写操作 NVIC_Configuration(); //设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级 3 KEY_Init(); //按键初始化 4 IWDG_Init(4,625); T[5:0]:窗口看门狗的计数器低 6 位 窗口看门狗的配置工作代码: 1 void WWDG_Init(u8 tr,u8 wr,u32 fprer) 2 { 3 RCC_APB1PeriphClockCmd //抢占 2 子优先级 3 组 2 24 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占 2,子优先级 3,组 2 25 (IWDG)和窗体看门狗(WWDG)的区别: (1)独立看门狗没有中断,窗口看门狗有中断 (2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 (3)独立看门狗只有下限,窗口看门狗又下限和上限 (4)
目录 1、基本、通用类型定时器 2、独立看门狗定时器 3、窗口看门狗定时器 ---- 之前分享了STM32 GPIO的原理、特性、选型和配置、如何计算RTC时钟异步预分频和同步预分频,这次简要阐述STM32L011 假设计数器寄存器数值为0xFC,采用2预分频,当使能计数器后,定时器时钟开始按照定时效果运行(定时由计数器寄存器和预分频器寄存器共同决定),计数器从0x00计数到0xFC后会产生中断,并更新时间开始新一轮的计数 数器寄存器数值为0xFC(十进制:252),采用2预分频的定时周期计算如下(假设使用32MHZ的时钟频率): ? 数器寄存器数值为0xFC(十进制:252),采用2预分频的定时周期计算如下(假设使用32MHZ的时钟频率): ? 2、独立看门狗定时器 独立看门狗定时器激活后,计数器开始从复位值 0xFFF (可通过窗口寄存器修改)递减计数,当计数器计数到终值 (0x000) 时会产生一个复位信号,在递减的过程中将键值 0x0000
看门狗的作用:防止单片机因未知原因死机或比我们预期的时间过长长时间不能响应,如果出现这种问题,看门狗就会把单片机复位 独立看门狗(IWDG): 时钟来源:内部低速时钟(LSI),所以用看门狗时不需要配置时钟 : 32位寄存器,低3位有效 配置分频系数,4*2^prer IWDG_RLR: 32位寄存器,低12位有效,每次对IWDG_KR写入0xAAAA,这个值会装载到看门狗计数器中(向下记数,记到0复位) IWDG_SR: 32位寄存器,低2位有效 位0:PVU:看门狗预分频值更新状态位,1:指示预分频正在更新,预分频器值只有在 PVU 位为 0 时才可更新。 IWDG->KR=0XCCCC; } 窗口看门狗(WWDG): 时钟来源:APB1时钟,使用时应先使能时钟,这一点与独立看门狗不一样 会先分频4096倍,再分2^WDGTB,所以WWDG超时公式如下 : Tout=(4096 * 2^WDGTB * (窗口值低6位+1))/Fpclk1 窗口看门狗喂狗时间有上下限,上限就是上窗口值(寄存器可以进行配置,不固定),下窗口值(固定,0X3F),喂狗必须在上窗口与下窗口之间
一、为什么需要看门狗? 运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至造成跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为看门狗 二、看门狗的作用 看门狗会无时无刻的去喂狗,如果程序发生跑飞的现象,那么单片机程序就不能继续去喂狗,继而计数器计数到0,看门狗产生复位脉冲信号。 三、看门狗工作原理 看门狗开始从复位值 0xFFF 递减计数,每次递减1计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。 那么看门狗是如何实现实时监测程序的呢?看门狗会无时无刻的去喂狗,如果程序发生跑飞的现象,那么单片机程序就不能继续去喂狗,继而计数器计数到0,看门狗产生复位脉冲信号。
2、无限制访问 不必要地暴露AWS环境增加了各种攻击方法的威胁,包括拒绝服务、中间人攻击(man-in-the-middle)、SQL注入和数据丢失。
重载寄存器 (IWDG_RLR) 1.2.4 状态寄存器 (IWDG_SR) 1.3 喂狗时间计算 Tout=((4×2^prer) ×rlr) /32,其中Tout为看门狗溢出时间(单位为ms) 1 //初始化独立看门狗 2 //prer:分频数:0~7(只有低3位有效!) 3 //rlr:自动重装载值,0~0XFFF. 4 //分频因子=4*2^prer.但最大值只能是256! u8 WWDG_CNT=0x7f; //初始化窗口看门狗 //tr :T[6:0],计数器值 //wr :W[6:0],窗口值 //fprer:分频系数(WDGTB),仅最低2位有效 //Fwwdg=PCLK1/(4096*2^fprer). (2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2 WWDG->SR=0X00; //清除提前唤醒中断标志位 WWDG->CFR|=1<