定义

看门狗的本质是一个定时器,在启动后,需要在一定时间内再给它一个信号,俗称“喂狗”,如果没有按时“喂狗”,说明MCU可能处于非正常状态,这时看门狗就向MCU发送个复位信号,使整个系统重启,重新进入正常的工作状态。看门狗命令在程序的中断中拥有最高的优先级。

独立看门狗( Independent Watchdog, IWDG)

时钟:独立看门狗的时钟源来自LSI(内部低速时钟),意味着不受外部晶振电路影响,同时就算系统主时钟发生故障时,也可以正常工作。使用内部晶振,也意味精度并不高,因此只适合应用在对时间精度要求比较低的场合。

计数:独立看门狗的计数器是一个12位的递减计数器,计数最大值为0xFFF,当计数器递减到0时,就会产生一个复位信号,重启整个系统。如果在递减到0之前,将重装载数值写入递减计数器,就会由重装载数值开始递减到0,如此反复,就永远不会到0,就不会产生复位信号,这个重装载计数值写入递减计数器的过程就叫“喂狗”。
重装载数值来自重装载寄存器( IWDG_RLR), 这个值大小决定独立看门狗的溢出时间(复位倒计时)。

/*
* STM32
* 函数名: void IWDG_Init(uint16_t period)
* 输入参数: period-设置喂狗周期,单位 ms
* 输出参数:无
* 返回值:无
* 函数作用:初始化独立看门狗的喂狗时间
* 刷新时间计算: Prescaler/LSI*Reload
*/
void IWDG_Init(uint16_t period) {hiwdg.Instance = IWDG; // 选择独立看门狗hiwdg.Init.Prescaler = IWDG_PRESCALER_256; // 设置预分频hiwdg.Init.Reload = 40000/256*period/1000; // 设置重装载值if (HAL_IWDG_Init(&hiwdg) != HAL_OK) // 初始化独立看门狗{Error_Handler();}
}

总结:独立看门狗包含一个12位递减计数器,从用户定义的t开始递减到0,必须在t~0之间喂狗,否则复位重启。

窗口看门狗( Windowwatchdog, WWDG)

窗口看门狗,包含一个7位递减计数器,从用户定义的t开始递减到64,必须在t~64之间喂狗,在t之前或者64之后喂狗,也会导致复位重启。 这里的t值,称之为窗口上限,由用户自定义设置;这里的64,称之为窗口下限,是系统固定的。窗口看门狗计数器必须在上窗口和下窗口之间被刷新(喂狗),不能过早,也不能过晚,这也就窗口看门狗中的“窗口”含义。

时钟:窗口看门狗的时钟源来自PCLK1(最高36MHz),经过4096分频,再经过WWDG_CFG的Bits[8:7]位WDGTB分频得到, WDGTB支持2^n分频( 0≤n≤3)。

计数: 窗口看门狗的计数器是一个7位的递减计数器,计数最大值为0x7F,当计数器递减到0x3F时,就会产生一个复位信号,重启整个系统。 当递减计数器递减到0x40时,如果使能了提前唤醒中断( WWDG_CFG的Bits[9]位EWI设置为1), 则会产生提前唤醒中断,在该中断可以保存重要数据或者向WWDG_CR重新写入新计数器值,完成喂狗操作。 一旦0x40变为0x39,系统将进行复位,因此必须在一个窗口看门狗计数周期内完成喂狗操作。WWDG_CR的Bits[7]位WDGA为窗口看门狗使能位,当为1时,窗口看门狗才工作。

窗口:窗口看门狗的WWDG_CFG的Bits[6:0]位为窗口上边界值,该值应小于计数器最大值0x7F,大于窗口下边界值0x3F。

窗口看门狗初始化
“HAL_WWDG_Init()–HAL库系统函数”函数会回调“ HAL_WWDG_MspInit()–HAL库系统函数”进行硬件相关初始化。

窗口看门狗中断处理
使能中断后,当窗口看门狗计数到0x40时,会进去提前唤醒中断,在该中断处理函数里,用户可以保存数据或喂狗。

/*
* 函数名: void WWDG_IRQHandler(void)
* 输入参数:无
* 输出参数:无
* 返回值:无
* 函数作用: WWDG 的中断处理函数
*/
void WWDG_IRQHandler(void) {HAL_WWDG_IRQHandler(&hwwdg);  // HAL库的系统函数
}  /*
* 函数名: void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
* 输入参数: hwwdg-WWDG 句柄
* 输出参数:无
* 返回值:无
* 函数作用:提前唤醒中断回调函数
*/
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg) { ClearWWDG(); // 用户函数内调用HAL库的系统函数“ HAL_WWDG_Refresh()”刷新计数器值,实现喂狗操作  printf("-------复位前保存数据------\n\r");printf("--------- 软件喂狗 --------\n\r");
}

对比

独立看门狗与窗口看门狗相关推荐

  1. stm32 独立看门狗和窗口看门狗区别

    原文地址https://www.cnblogs.com/pertor/p/9483445.html 一.使用调条件 二.特点对比 三.手册介绍 [注]图中的WDGTB为3表示2^3=8,表示8分频,最 ...

  2. stm32 定时器_如何计算STM32定时器、独立看门狗和窗口看门狗

    点击上方蓝色字体,关注我们 本博文简要阐述STM32L011微控制器定时器的参数配置(其他型号大同小异,本文侧重讲解配置,至于各类定时器的特点后续再述),STM32定时器种类繁多有通用定时器.基本定时 ...

  3. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  4. stm32看门狗_STM32单片机:独立看门狗、窗口看门狗的配置

    SATM32单片机的看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却完全不同,今天来看一下他们的具体区别和配置方法.▍STM32独立看门狗由专门的低速时钟(LSI)驱动,即便是主时钟发生故障它仍 ...

  5. 看门狗的喂法(独立看门狗和窗口看门狗的区别)!

    在嵌入式系统中,由于MCU(微控制单元:Microcontroller Unit)的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工 ...

  6. 如何计算STM32定时器、独立看门狗和窗口看门狗

    目录 1.基本.通用类型定时器 2.独立看门狗定时器 3.窗口看门狗定时器 之前分享了STM32 GPIO的原理.特性.选型和配置.如何计算RTC时钟异步预分频和同步预分频,这次简要阐述STM32L0 ...

  7. MCU独立看门狗 vs 窗口看门狗

    关注+星标公众号,不错过精彩内容 素材来源 | STM32 微信公众号 | 嵌入式专栏 早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作.为了避免这个问题,后期的MCU在内部集成了看门狗的 ...

  8. STM32—看门狗详解入门(独立看门狗、窗口看门狗)

    目录 一.什么是看门狗? 二.独立看门狗IWDG 1.特点.本质及原理 2.配置 3.main.c代码 三.窗口看门狗WWDG 1.特点.本质及原理 2.配置 3.main.c代码 四.独立看门狗与窗 ...

  9. 独立看门狗和窗口看门狗

    为什么要开门狗? 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的 ...

  10. STM32中的独立看门狗和窗口看门狗

    STM32中的独立看门狗和窗口看门狗 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况.为了避免这种情况的出现,后期的MCU都集成了看门狗的功能.但是,目前看门狗发展到今天 ...

最新文章

  1. c# blockingcollections
  2. windows下备份Mysql数据的脚本
  3. 绝不能错过的10款最新OpenStack网络运维 监控工具
  4. Server 2008 Core/服务器核心环境安装SQL 2008 方法
  5. C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权
  6. android---am命令
  7. Lambda表达式Java教程
  8. 大学c语言常用语句意思,C语言常用语句
  9. iOS应用横竖屏切换
  10. python虚拟机直接加载字节码运行程序_第二章 python如何运行程序
  11. 我的测试生活感悟2 - Art Of Unit Testing
  12. 关于java重载函数,参数为null时,调用的处理。(精确性原则)
  13. iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due
  14. linux fopen文件失败,fopen自动创建文件失败(文件路径检查创建)
  15. 提问的智慧(转自github)
  16. 中小企业监控体系构建实战--案例分享(内附传送门)
  17. caxa发生文件读写异常_常见socket读写异常及错误
  18. ITIL学习笔记——核心流程之:服务级别管理
  19. C++ stander library--type traits and type utility
  20. 理解 BLS 签名算法

热门文章

  1. 智加科技完成A+轮融资,推动物流产业升级
  2. ubuntu安装pangolin
  3. 使用一个SQL查询出每门课程的成绩都大于80分的学生姓名
  4. 递归展示树状图/树状表格
  5. 职业经理人影响力自检手册(二)
  6. (HOTA)多目标跟踪MOT指标计算方法
  7. Flash数据读取和保存
  8. 油溶性Cu,Mn共掺杂量子点光转换材料
  9. 数据可视化之智能bi实现生态绿地数据可视化分析
  10. PHP高级计算器的过程,PHP使用栈完成高级计算器-接上文模拟栈