independent watchdog 独立看门狗 window watchdog 窗口看门狗
创始人
2024-05-02 06:01:50
0

看门狗(watchdog)

防止硬件因外界电磁场干扰或其他导致不能正常工作的,导致不可预料后果,对芯片进行实时检测的模块或芯片称为看门狗

看门狗工作过程

启动看门狗后,有一个计数器从最大值递减,计数器减到0就会导致系统复位。为了不让每次复位会在某个时间内喂狗,也就是修改相应的寄存器在计数器没减到0的时候把计数器值再次调大。

IWDG和WDOG(window)

独立看门狗和窗口看门狗的区别:
IWDG使用的是LSI低速时钟,即使主时钟故障,独立看门狗仍然可以正常工作,只有上限,下限是0
WDOG是从APB1时钟分频的时钟,**时间较精确,**适合精确计时的程序检测,有上限,下限计数器时间0x40

独立看门狗寄存器启动运行

1,键值寄存器(IWDG_KR)写入0xcccc,开启独立看门狗。计时器从0xfff开始递减,若减到1则复位
2,在键值寄存器中写入0xAAAA,计数器会自动装载(重装载寄存器)IWDG_RLR的值,也就是俗称的**喂狗**
3,如果程序异常,无法喂狗,进而系统复位

在这里插入图片描述
在这里插入图片描述
IWDG_KR寄存器中写入0x5555,也就是取消写保护

独立看门狗时间计算

在这里插入图片描述
分频系数=4*2^PR,所以每次一个时钟减一次,所以所有溢出时间是计时器的值RLR有关,
在这里插入图片描述

Tout=((4×2^PR) ×RLR) /40 

常用函数

 取消寄存器写保护:IWDG_WriteAccessCmd();
②  设置独立看门狗的预分频系数,确定时钟:IWDG_SetPrescaler();
③  设置看门狗重装载值,确定溢出时间:IWDG_SetReload();
④  使能看门狗IWDG_Enable();
⑤  应用程序喂狗:IWDG_ReloadCounter();溢出时间计算:Tout=((4×2^prer) ×rlr) /40 (M3)void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新

窗口看门狗

喂狗时间

其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定0x3F)。独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。窗口看门狗的T6位就是在变为0就会复位,也就是下线值0x3f
在这里插入图片描述

窗口看门狗框图工作流程

首先,WWDG_CR看门狗启动位必须作用
第一种,WWDG_CR的后7位数据(计数器)大于WWDG_CFR时,通过比较器输出1,这时候喂狗(写入WWDG_CR)就会复位。可以看出WWDG_CFR记录的是上限值。
第二种:当WWDG_CR的T6位为0时,直接经过或门导致复位,所以不能减到0X40之下的0x3F.否则也触发复位
注意下图中的分频是在WWDG_CFR的第7,8位的值设置控制的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看门狗时间

在这里插入图片描述

常用寄存器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

程序设置和常用函数

 使能看门狗时钟:RCC_APB1PeriphClockCmd();
②  设置分频系数:WWDG_SetPrescaler();
③ 设置上窗口值:WWDG_SetWindowValue();
④ 开启提前唤醒中断并分组(可选):WWDG_EnableIT();   NVIC_Init();
⑤ 使能看门狗:WWDG_Enable();
⑥ 喂狗:WWDG_SetCounter();
⑦编写中断服务函数WWDG_IRQHandler();   //一般将唤醒中断过程中喂狗

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...