1.看门狗简介

在工业控制/汽车电子/航空航天等需要高可靠性的系统中,为了防止“系统在异常情况 下,受到干扰,MCU/CPU 程序跑飞,导致系统长时间异常工作”的情况发生,而设计了一 种用于检测程序运行状态的芯片或电路,俗称看门狗(即 Watchdog)。

看门狗有一个输入信号和一个输出信号。输入信号也称“喂狗”,输出信号关联 MCU 的复位端。系统运行后启动看门狗计数器,看门狗开始计数,当计数满后未收到清零信号(喂 狗),看门狗计数器溢出,触发看门狗中断,输出控制 MCU 复位。

2.IWDG和WWDG看门狗

独立看门狗 IWDG(全称是 Independent watchdog)最适合应用于那些需要看门狗作为 一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。独立看门狗是在计数器递减到 0 之前必须喂狗,否 则复位。

窗口看门狗 WWDG(全称是 Window watchdog) 最适合那些要求看门狗在精确计时窗口起作用的应用程序。窗口看门狗是在计数器递减到固定值 0x40 之前一个区段必须喂狗,否则复位。 之所以说窗口看门狗必须在计数器递减到固定值 0x40 之前一个区段必须喂狗,是因为如果 在计数器递减到某一个数 WR 之前喂狗,也会导致系统复位。这个 WR 叫窗口的上限值。

窗口看门狗和独立看门狗还一个重要区别是窗口看门狗有早期唤醒中断(EWI),通 过设置 WWDG_CFR 寄存器中的 WEI 位可以开启该中断。独立看门狗是没有中断的。

3.看门狗超时时间计算

1 .IWDG 独立看门狗超时时间计算

RLR 表示重装载值(低 11 位有效),PRER 表示预分频系数值(范围是 0~6)。例 如,按 RLR 为 625、PRER 为 4 来计算可得 IWDG 看门狗超时时间为 1000ms 即 1s。

2.WWDG 窗口看门狗超时时间计算

 Fpclk1 表示 APB1 的时钟频率(单位为 KHZ),WDGTB 表示 WWDG 的预分频系 数,T[5:0]表示 WWDG 的计数器低 6 位。

4.程序举例说明

1、IWDG使用

#include "IWDG.h"
//初始化
void Iwdg_Init(void){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetReload(625);
//IWDG_Prescaler_64对应的预分频系数值4IWDG_SetPrescaler(IWDG_Prescaler_64);IWDG_Feed();IWDG_Enable();
}
void IWDG_Feed(void){IWDG_ReloadCounter();
}

由公式及代码可以看到RLR设置为625, 预分频系数为4,则可以得到IWDG 看门狗超时时间为 1000ms。

#include "public.h"int main(void)
{ led_init();Iwdg_Init();sw_delay_ms(500);Led_On(LED_1);//主循环   while(1){    //延时530毫秒sw_delay_ms(530);//喂狗IWDG_Feed();//延时500毫秒sw_delay_ms(500);}
}

在while循环中共延时了1030毫秒,属于延时喂狗,当计数满后未收到清零信号(喂 狗),看门狗计数器溢出,触发看门狗中断,输出控制 MCU 复位。

2、WWDG使用

#include "wwdg.h"
//初始化
void Wwdg_Init(uint8_t tr, uint8_t tt, uint32_t td){NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);WWDG_SetCounter(tr);WWDG_SetWindowValue(tt);WWDG_SetPrescaler(td);WWDG_Enable(WWDG_CNT);WWDG_ClearFlag();WWDG_EnableIT();//优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
//喂狗函数
void WWDG_Feed(void){WWDG_SetCounter(WWDG_CNT);
}
//中断函数
void WWDG_IRQHandler(void){WWDG_ClearFlag();Led_On(LED_2);GPIO_SetBits(GPIOG, GPIO_Pin_7);
}
#include "public.h"int main(void)
{   SystemInit();led_init();//led初始化Wwdg_Init(0x7F,0x5F,WWDG_Prescaler_8);Beep_Init();//蜂鸣器初始化sw_delay_ms(20);Led_On(LED_1);//主循环   while(1){sw_delay_ms(8);WWDG_Feed();sw_delay_ms(47);}
}
/********************************************END FILE********************/

按照程序和上面的公式可以计算得到WWDG 超时计算公式 可计算出超时时间约为 58.25ms。(ABP1的时钟频率为36MHZ)。通过设置与延时函数就可以按时、延时、提前喂狗。

STM32--IWDG和WWDG看门狗相关推荐

  1. STM32外部中断与看门狗

    STM32外部中断与看门狗 前面说过中断的概念了,但是没有细究,中断除了内部中断(比如运行错误),还能受到外部中断 文章目录 STM32外部中断与看门狗 一 外部中断描述 1.1 外部中断描述 1.2 ...

  2. STM32 (五)看门狗

    看门狗简介: 顾名思义就是看门的dog,不过这可不是用来看家的,而是用来看单片机的, 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环:或者因为 ...

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

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

  4. c语言中什么叫喂狗,STM32是怎么初始化看门狗和喂狗的

    STM32是怎么初始化看门狗和喂狗的 看门狗初始化步骤: 1.IWDG_PR和IWDG_RLR寄存器具有写保护功能.要修改这两个寄存器的值,必须先向 IWDG_KR寄存器中写入0x5555. 2.设置 ...

  5. STM32 HAL库窗口看门狗

    STM32 HAL库窗口看门狗 1.窗口看门狗基本原理 2.独立看门狗与串口看门狗区别 3.应用场合 4.窗口看门狗的时钟 5.窗口看门狗寄存器: ①.看门狗控制寄存器(WWDG_CR) 2.配置寄存 ...

  6. STM32学习笔记——窗口看门狗WWDG介绍及配置

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

  7. STM32系列 STM32F4xx 独立看门狗(IWDG)

    2019独角兽企业重金招聘Python工程师标准>>> 0 前言     由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存数据混乱,会导致程序指针错误,不在程序区 ...

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

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

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

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

最新文章

  1. 同为Java开发:有了这些Java项目经历,面大厂稳了!
  2. C++(STL):12--- list基本介绍
  3. 枚举类型 c# 1201
  4. SpringBoot精通系列-Spring Boot中如何配置Https
  5. 第二个冲刺期的第四天
  6. quarts集群 运维_精讲Elastic-job + Quartz实现企业级定时任务
  7. python的本质是什么意思_python生成器指的是什么意思
  8. 华为交换机查看发光收光
  9. 小程序插件开发使用教程
  10. cs5460a c语言程序,cs5460a应用电路(含源程序)
  11. [C语言] [游戏] 扫雷
  12. 2020 全国大学生数学建模竞赛C题思路+代码
  13. mybatis.org/dtd/mybatis-generator-config_1_0.dtd标红
  14. 2台PLC通讯(FX5U和FX5U)
  15. 给我一个西门子plc采集大数据存储与分析方案
  16. windows安装包删了会有影响吗_删除Windows更新安装包及更新记录
  17. 按钮点击事件(java)
  18. Google首席工程师Joshua Bloch谈如何设计优秀的API
  19. C++小工进阶之路 XV(list总结以及deque介绍)
  20. 面向服务架构(SOA)与微服务架构

热门文章

  1. git hook 防止提交binding.pry
  2. 众创新企业落地物联网,物联网助阵台湾科技产业升级
  3. 微信小程序了解向指南
  4. 在AWS-EMR上使用Ranger管理Atlas权限
  5. pandas Excel 光谱数据处理
  6. OpenJudge 7384(分成互质组)
  7. 流利阅读 2019.1.27 The death of Venice? City’s battles with tourism and flooding reach crisis level
  8. JPG免费转PDF的方法分享
  9. 软文营销:文章写的好不如发的好!
  10. trajectory planning -i https://pypi.tuna.tsinghua.edu.cn/simple export ALL_PROXY=socks5://12333