一、看门狗简介

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统。

独立看门狗(IWDG)

一个12位的递减计数器,最大值为0XFFF

前文再续,书接上一会,上一章说到待机模式可以通过IWDG唤醒,独立看门口功能框图如下。实际上独立看门口狗就是一个递减计数器,当计时器的值减到0时,IWDG会产生一个复位信号,系统复位重新启动。为避免产生看门狗复位,则需在计数器减到0之前重载计数器,即“喂狗”。当程序出错时没有刷新计数器,计数器递减到0,系统复位重新启动,避免程序继续错误运行。

独立看门狗的定时时间并非一定非常精确,只适用于对时间精度要求比较低的场合

IWDG参数配置如下。IWDG的时钟为32kHz,此时设置计数器时钟为32分频,则分频后的时钟频率为1KHz.递减基础器重载值(down-counter reload value)配置为1000,即1000ms不刷新IWDG系统复位。IWDG窗口值(windows value)为默认不修改。当计数器的值大于窗口值时,如果执行重载操作,则会产生复位。(我这里随便设置的)

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_IWDG_Init();printf("test \r\n");  HAL_IWDG_Init(&hiwdg);//初始化并开启iwdg  F7   HAL_IWDG_Start(&hiwdg);printf("\n\r***** start main before while *****\n\r");while (1){printf("\n\r Refreshes the IWDG !!!\n\r");HAL_IWDG_Refresh(&hiwdg);//刷新计数值,当这行被注释掉,程序会无限调用main HAL_Delay(800);}}

不喂狗

喂狗

一、看门狗简介

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统。

独立看门狗(IWDG)

前文再续,书接上一会,上一章说到待机模式可以通过IWDG唤醒,独立看门口功能框图如下。实际上独立看门口狗就是一个递减计数器,当计时器的值减到0时,IWDG会产生一个复位信号,系统复位重新启动。为避免产生看门狗复位,则需在计数器减到0之前重载计数器,即“喂狗”。当程序出错时没有刷新计数器,计数器递减到0,系统复位重新启动,避免程序继续错误运行。

本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置,开启独立看门狗(IWDG)。

IWDG参数配置如下。IWDG的时钟为32kHz,此时设置计数器时钟为32分频,则分频后的时钟频率为1KHz.递减基础器重载值(down-counter reload value)配置为1000,即1000ms不刷新IWDG系统复位。IWDG窗口值(windows value)为默认不修改。当计数器的值大于窗口值时,如果执行重载操作,则会产生复位。

在main()函数中开启IWDG.

在while循环中每延时800ms刷新一次IWDG,重载计数器。

编译程序并下载到开发板。打开串口调试助手,设置波特率为115200,串口助手上面会显示如下信息。

当在while循环中注释掉HAL_IWDG_Refresh(&hiwdg)语句,不刷新计数器。重新编译程序时串口会输出如下信号,由于不刷新计数器,独立看门狗每1000ms复位重启一次。

再实际应用中,独立看门狗刷新操作不会再while循环中,而且也不好计算时间。一般都是通过定时器中断处理函数中刷新IWDG。

窗口看门狗(WWDG)

窗口看门狗相对独立看门狗对计数器的刷新时间要求更加严格。必须在限定的时间窗口内刷新计数器。

窗口看门狗激活情况下,满足以下条件会产生复位。

1.当递减计数器的值小于0x40时(即从0x40滚到0x3F)会产生复位。

2.当计数器值大于窗口寄存器的值时,如果软件重载计数器,则会产生复位。

从上面的时序图中可以看到,如果递减计数器的值(T[6:0])大于窗口寄存器(W[6:0])的值,重载计数器会产生复位。当递减计时器的值小于0x40时,也会产生复位。所以只能在W[6:0] ~ 0x3F之间刷新,在窗口之外重载递减计数器时复位。存储在窗口寄存器(WWDG_CR)中的值必须介于0xFF和0xC0之间。开启窗口看门狗中断时,当递减计数器的值等于0x40时触发中断。

配置WWDG计数器预分频为8,窗口寄存器的值为90,递减计数器刷新值为127。

WWDG时钟是挂接到APB1上,系统时钟为180MHz时,PCLK1时钟为54MHz。

则WWDG计数器的频率为:(PCLK1 (45MHz)/4096)/8) = 1648 Hz (~607 us)

WWDG计数器刷新值为127,则超时时间为:~607 us * (127-63) = 39 ms

F7

WWDG时钟是挂接到APB1上,系统时钟为216MHz时,PCLK1时钟为45MHz。

则WWDG计数器的频率为:(PCLK1 (54MHz)/4096)/8) = 1373Hz (~728us)

WWDG计数器刷新值为127,则超时时间为:~728 us * (127-63) ~= 47 ms

F4

开启窗口看门狗中断。

在main()函数中开启WWDG.

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_WWDG_Init();MX_NVIC_Init();printf("main \r\n");__HAL_WWDG_ENABLE_IT(&hwwdg,WWDG_IT_EWI);//开启WWDG并使能中 HAL_WWDG_EarlyWakeupCallbackprintf("\n\r***** start main before while*****\n\r");while (1){printf(" Refreshes the WWDG !!!\n\r");HAL_Delay(200);}}//窗口程序的中断并不是刷新计数器 而是保存程序重要数据,不然没任何意义
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{HAL_WWDG_Refresh(hwwdg);//喂狗,当改行被注释掉则无限重启主程序
}

在main.c文件后面添加WWDG中断回调函数,当递减计数器的值为0x40触发中断,中断处理函数中刷新WWDG。

编译程序并下载到开发板。打开串口调试助手,设置波特率为115200,串口助手上面会显示如下信息。

当在WWDG中断回调函数中注释掉HAL_WWDG_Refresh 语句,不刷新计数器。重新编译程序时串口会输出如下信号,由于不刷新计数器,独立看门狗每47ms复位重启一次。

HAL--独立看门狗、窗口看门狗相关推荐

  1. 【STM32】HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)

    前言:   今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使 ...

  2. 独立看门狗/窗口看门狗

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

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

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

  4. STM32学习笔记:独立看门狗和窗口看门狗

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

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

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

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

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

  7. 窗口看门狗与编程实验

    更多交流欢迎关注作者抖音号:81849645041 目标 了解窗口看门狗的工作原理及其使用场景,通过喂狗事件使窗口看门狗不产生复位. 原理 STM32有两个看门狗,一个是独立看门狗,一个是窗口看门狗. ...

  8. 【STM32学习笔记】(15)——窗口看门狗(WWDG)详解

    窗口看门狗(WWDG)概述 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障.除非递减计数器的值在T6位变成0前被刷新,否则看门狗电路在达到预置 ...

  9. stm32mp1 Cortex M4开发篇7:窗口看门狗

    本文章为<ARM Cortex-M4裸机开发篇>系列中的一篇,,全系列总计14篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).针对FS-MP1A开发板, ...

  10. 【STM32】窗口看门狗程序

    00. 目录 文章目录 00. 目录 01. 窗口看门狗简介 02. 硬件设计 03. 编程步骤 04. 程序示例 05. 测试结果 06. 附录 07. 声明 01. 窗口看门狗简介 窗口看门狗(W ...

最新文章

  1. pyQt 每日一练习 -- 登录框
  2. POJ - 3342 Party at Hali-Bula(树形dp)
  3. ABAP的语法高亮是如何在浏览器里显示的
  4. BZOJ - 2186 欧拉函数
  5. 安装应用程序时,提示以前的某个程序安装挂起的解决方法
  6. Android SQLite数据库demo。架构组件Room
  7. 判断用户 小程序_【重要声明】小程序维护中,iphone用户手机暂时用不了小程序...
  8. SpringBoot的Bean之@ConditionalOnBean与@ConditionalOnClass
  9. python pexpect 学习与探索
  10. php arff文件,python实现txt文件格式转换为arff格式
  11. WebService—实现接口发布和客户端调用的几种方式
  12. 《大前端进阶 安全》系列 HTTPS详解(通俗易懂)
  13. ISO14001认证申请条件
  14. 酷狗音乐api接口php,【教程分享】酷狗音乐API接口大全(40+个)
  15. AD-快速查找元器件
  16. 95后大厂程序员删库被判刑,只因项目被接手对领导心生不满
  17. oracle数据库中的回收站,Oracle回收站介绍
  18. three相机在模型上_threejs学习心得(场景的搭建+运动模型导入)
  19. 淘宝API JAVA 乱码
  20. 我的世界 服务器文件ess,《我的世界》ess指令大全 ess指令作用

热门文章

  1. 2021年茶艺师(中级)复审考试及茶艺师(中级)复审模拟考试
  2. 实验3-11 计算油费 (15 分)
  3. java 摩尔斯电码_使用Java进行摩尔斯电码转换
  4. DoraOS一款非常好用的瘦客户机系统,可将旧PC改造成瘦客户机
  5. 实战SV验证学习(lab4)
  6. 【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)
  7. 最简便的lightGBM GPU支持的安装、验证方法
  8. 【NGS分析工具】Sentieon软件常见问题列表(持续更新...)
  9. FAFU OJ 删除子串
  10. 金山词霸2011 vs. 有道词典4.0