一、看门狗简介

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

独立看门狗(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. 我把 Spring Boot 的 banner 换成了美女,老板说工作不饱和,建议安排加班
  2. c语言中 d的用法,C语言中的#define用法总结
  3. AzureDirectory Library for Lucene.Net
  4. 整数划分问题(递归法)
  5. asp.net Repeater取得CheckBox选中的某行某个值的c#写法
  6. mysql mode_mysql中的sql_mode
  7. 使用DataTable作为存储过程的参数
  8. 天池 在线编程 布尔表达式求值(栈)
  9. Java FilterInputStream skip()方法与示例
  10. CSS 设置表格格式
  11. 苹果要换Type-C接口?丁磊建议统一充电器接口 工信部回复来了...
  12. 《Effective Ruby:改善Ruby程序的48条建议》一第6条:了解Ruby如何构建继承体系
  13. c语言入门教程怎么编程,从零开始的C语言入门教程-编程语言的基础
  14. win10系统镜像下载及在VMware虚拟机上创建虚拟机
  15. 工业机器人电柜布线_工业机器人示教器及其连线图
  16. 电感的作用和工作原理
  17. 模拟赛 东风谷早苗
  18. 百度引流软文怎么写?如何利用软文从百度引流?
  19. 快速搭建多用户共享桌面云环境 云教室环境搭建
  20. CocosEditor For JS (Cocos2d-JS) 教程聚合和代码下载

热门文章

  1. C与C++游戏项目练习4:弹跳的小球2.0
  2. Java项目一 家庭记账软件
  3. 联想服务器维护 - System X 3650 M5
  4. 云计算厂商们,你们辜负了中国的用户
  5. SpringBoot学习之路---简单记录整合SpringSecurity实现登录认证授权
  6. 如何高效地引导自己的行为
  7. Freeswitch配置呼叫转移
  8. 阿里云共享和独享云虚拟主机该怎么选?
  9. windows 下 用 dos 备份 oracle 数据库,并删除七天前的备份
  10. oracle数据库恢复aul_[数据库]oracle从dbf文件中恢复数据(通过AUL工具实现)