26:WDG看门狗

news2024/9/28 16:17:15

WDG看门狗

  • 1、看门狗的简介
  • 2、独立看门狗
  • 3、窗口看门狗
  • 4、独立看门狗代码
  • 5、窗口看门狗代码

1、看门狗的简介

1、看门狗的作用是监控程序的运行状态。当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。
2、看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时(即程序卡死,没有执行到重置计数器的代码),看门狗硬件电路就自动产生复位信号。
3、STM32中内置了2个看门狗:
  独立看门狗(IWDG):独立工作,对时间精度要求较低。
  窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。

2、独立看门狗

1、下图为独立看门狗的内部结构框图。
在这里插入图片描述
如图所示:独立看门狗就如同一个自减定时器,当减到0的时候就会触发复位信号。独立看门狗的时钟源来源于内部低速时钟LSI,然后通过分频器后,脉冲进入12位的自减计数器,来一个脉冲,计数器自减1。而重装载寄存器设定重装值,通过键寄存器减重装值配置到自减计数器里面,如图寄存器都是工作在1.8v的供电区域,而看门狗的计数功能工作在VDD供电区域,所以能在停机/待机模式下正常的工作。

2、下图位键寄存器的数据对应的操作:
在这里插入图片描述

3、独立看门狗的溢出事件(超时时间)
在这里插入图片描述如图:当PR寄存器里面写入0时,则分频器为4分频,时钟脉冲 = 40KHz / 4 = 10KHz,则一个时钟周期T = 1 / 10KHz = 0.1ms,超时的时间 = 0.1ms * (RL寄存器里面的值 + 1),RL重装寄存器最小值 = 0,RL重装寄存器最大值 = 0xFFF(4095)。所以超时时间 = <0.1ms,409.6ms>。

3、窗口看门狗

1、下图为窗口看门狗的内部结构框图
在这里插入图片描述

如图所示:窗口看门狗的时钟来源于PCLK1(36MHz),然后通过4096分频后,在通过看门狗分频器后进入看门狗的6为自减计数器CNT,其实CNT计数只有后5位有效,第6位作用为标志位,当第6位为1时,看门狗不触发复位信号,当第6位由1->0时,看门狗触发复位信号。即CNT:由1xxxxx变为011111,看门狗触发复位。而窗口的寄存器的值(进入窗口时间) < 自减计数器的值的时候,是不允许喂狗(计数器重装),若发生喂狗则会触发复位,所以只能在窗口的时间里面喂狗
在这里插入图片描述
2、超时时间和窗口时间
在这里插入图片描述

4、独立看门狗代码

与之相关标准库编程接口:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此不用独立开启LSI振荡器了

在这里插入图片描述

/*
	独立看门狗的简单使用
*/

#include "stm32f10x.h"                 
#include "OLED.h"
#include "Delay.h"

int main(void)
{
	OLED_Init();
	OLED_Clear();
    OLED_ShowString(1,1,"IWDG Test:");
    
    
 /*
  *  在OLED上面显示是复位建导致的复位还是独立看门狗导致的复位  
  */
    if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == 1)//独立看门狗导致的复位,置标志位
    {
        OLED_ShowString(2,1,"IWDGRST");
        Delay_ms(500);
        OLED_ShowString(2,1,"       ");
        RCC_ClearFlag();//清除标志位
    }
    else
    {
        OLED_ShowString(4,1,"PINRST");
        Delay_ms(500);
        OLED_ShowString(4,1,"      ");
        RCC_ClearFlag();//清除标志位
    }
    
/* 
 *  配置独立看门狗的超时时间为1000ms,即在1000ms内喂狗,就不会执行复位
 *  如果超过1000ms没有喂狗(程序卡死),那么就会执行复位 
 */
    /* 1、解除写保护 */
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    
    /* 2、配置预分频值,由于超时时间 = 1000ms,所以 Prescaler ≧ 16 */
    IWDG_SetPrescaler(IWDG_Prescaler_16);//16分频
    
    /* 3、配置重装值,使其超时时间 = 1000ms,
          40KHz / 16 = 2.5KHz,1 / 2.5KHz = 0.4ms,1000ms / 0.4ms = 2500 < 4095
    */
    IWDG_SetReload(2499);
    
    /* 4、使能独立看门狗 */
    IWDG_Enable();
	while(1)
	{
        /* 每隔800ms喂狗一次,因为800ms < 1000ms,所以不会触发复位*/
		IWDG_ReloadCounter();//喂狗
        OLED_ShowString(2,1,"weigou");//通过OLED不断显示“weigou”来表示不断执行喂狗操作
        Delay_ms(400);
        OLED_ShowString(2,1,"      ");
        Delay_ms(400);
	}
}

5、窗口看门狗代码

与之相关标准库编程接口:
在这里插入图片描述

/*
	窗口看门狗的简单使用
*/

#include "stm32f10x.h"                 
#include "OLED.h"
#include "Delay.h"

int main(void)
{
	OLED_Init();
	OLED_Clear();
    OLED_ShowString(1,1,"WWDG Test:");
    
    
 /*
  *  在OLED上面显示是复位建导致的复位还是独立看门狗导致的复位  
  */
    if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == 1)//独立看门狗导致的复位,置标志位
    {
        OLED_ShowString(2,1,"WWDGRST");
        Delay_ms(500);
        OLED_ShowString(2,1,"       ");
        RCC_ClearFlag();//清除标志位
    }
    else
    {
        OLED_ShowString(4,1,"PINRST");
        Delay_ms(500);
        OLED_ShowString(4,1,"      ");
        RCC_ClearFlag();//清除标志位
    }
    
/* 
 *  配置窗口看门狗的超时时间为50ms,窗口时间为20ms。则进入窗口的时间为50ms-20ms = 30ms
 *  即在30ms~50ms内喂狗,就不会执行复位  如果<30ms或者>50ms没有喂狗时,那么就会执行复位 
 */
 
    /* 1、开启PCLK1的时钟 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
    
    /* 2、配置预分频值,由于超时时间 = 50ms,所以 Prescaler = 8,计数得出计数器的值为55*/
    WWDG_SetPrescaler(WWDG_Prescaler_8);
    
    /* 3、配置窗口值,由于计入窗口时间 = 30ms,所以 Prescaler = 8,计数得出计数器的值为33*/
    WWDG_SetWindowValue(0x40 | (54-33));
    
    /* 4、配置计数器值 */
    WWDG_Enable(0x40 | 54);
	while(1)
	{
        /* 每隔40ms喂狗一次,因为30ms < 40ms < 50ms,所以不会触发复位*/
        OLED_ShowString(2,1,"weigou");//通过OLED不断显示“weigou”来表示不断执行喂狗操作
        Delay_ms(20);
        OLED_ShowString(2,1,"      ");
        Delay_ms(20);
        WWDG_SetCounter(0x40 | 54);//喂狗
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现行经济下,兜底的生存方式是什么?

最近在网上看到一个问题&#xff0c;在经济下行的时候&#xff0c;兜底的生存方式是什么,看到之后&#xff0c;就随便写写。 在现在的经济环境下&#xff0c;看看网上的裁员、降薪信息 到底什么才是兜底的生存方式&#xff0c;原来认识的人&#xff0c;包括我自己也在想失业后…

知识付费APP开发指南:基于在线教育系统源码的技术详解

本篇文章&#xff0c;我们将探讨基于在线教育系统源码的知识付费APP开发的技术细节&#xff0c;帮助开发者和企业快速入门。 一、选择合适的在线教育系统源码 选择合适的在线教育系统源码是开发的关键一步。市场上有许多开源和商业化的在线教育系统源码&#xff0c;开发者需要…

《深度学习》卷积神经网络 数据增强、保存最优模型 原理解析及实例实现

目录 一、数据增强 1、什么是数据增强 2、目的 3、常用的数据增强方法 4、数据预处理 用法&#xff1a; 5、使用数据增强增加训练数据 二、保存最优模型 1、什么是保存最优模型 2、定义CNN模型 运行结果&#xff1a; 3、设置训练模式 4、设置测试模式、保存最优模…

影院管理新篇章:小徐的Spring Boot应用

第三章 系统分析 整个系统的功能模块主要是对各个项目元素组合、分解和更换做出对应的单元&#xff0c;最后在根据各个系统模块来做出一个简单的原则&#xff0c;系统的整体设计是根据用户的需求来进行设计的。为了更好的服务于用户要从小徐影城管理系统的设计与实现方面上做出…

羽毛类型检测系统源码分享

羽毛类型检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

智尚招聘求职小程序V1.0.17

微信小程序招聘管理系统。支持多城市、人才版块、招聘会、职场资讯、经纪人入驻等功能。提供全部无加密源码&#xff0c;支持私有化部署。 V1.0.17增加功能 1、增加求职者投简历时检测简历状态功能 更新后无需重新发布前端

16 Midjourney从零到商用·实战篇:产品工业设计

未来的产品设计师&#xff0c;一定真的不能只会画图&#xff0c;要往多元化发展&#xff0c;要有更强的思维能力综合的判断能力&#xff0c;懂市场&#xff0c;懂加工&#xff0c;懂生产等&#xff0c;变成综合类人才。基础的设计工作部分已经被AI所取代&#xff0c;生产力在一…

redis 中IO多路复用与Epoll函数

一 IO多路复用 1.1 IO多路复用作用 1.2 同步异步阻塞非阻塞

UE4_Niagara基础实例—使用自定义模块二

效果&#xff1a; 粒子限制在球形范围内 操作步骤&#xff1a; 1、因为我们要对粒子的位置进行控制&#xff0c;所以需要开启本地空间&#xff0c;粒子与发射器位置有关。使用GPU计算模拟&#xff0c;需勾选固定边界。 2、简单调节其它参数&#xff1a; 3、现在我想把粒子锁定…

二分查找(2)

目录 x 的平方根 题解&#xff1a; 山脉数组的峰顶索引&#xff08;数组内只有一个峰值&#xff09; 题解&#xff1a; 寻找峰值&#xff08;数组内有多个峰值&#xff09; 题解&#xff1a; 寻找旋转排序数组中的最小值 题解&#xff1a; 点名 题解&#xff1a; 怎…

FreeRTOS 内存管理源码解析

目录 一、heap_11、源码讲解2、总结 二、heap_21、源码讲解1.1 堆的初始化1.2 内存分配1.3 内存释放 2、总结 三、heap_3四、heap_41、源码1.1 插入链表1.2 堆的初始化1.3 内存的申请1.4 内存的释放 2、总结 五、heap_51、源码1.1 堆的初始化1.2 链表的插入、内存分配、释放 2、…

五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步

前言 前面四篇文字都在学习Doris的理论知识&#xff0c;也是比较枯燥&#xff0c;当然Doris的理论知识还很多&#xff0c;我们后面慢慢学&#xff0c;本篇文章我们尝试使用SpringBoot来整合Doris完成基本的CRUD。 由于 Doris 高度兼容 Mysql 协议&#xff0c;两者在 SQL 语法…

【滑动窗口算法】——定长滑动窗口——Python(附题)

一.定长滑动窗口是什么及其使用场景 定长滑动窗口算法的核心思想是使用两个指针&#xff0c;通常称为“左指针”和“右指针”。窗口的大小是固定的&#xff0c;右指针用于扩展窗口&#xff0c;直到达到指定大小&#xff0c;而左指针则在窗口移动时逐步向右滑动。这样可以高效地…

3款照片人物开口说话AI工具,跟真人说话一样~免费!短视频带货必备!(附教程)

大家好&#xff0c;我是画画的小强 今天给大家分享一个AI图片口播数字人讲认知思维&#xff0c;单号佣金赚5W的AI带货信息差玩法&#xff0c;许多小伙伴表示对这类AI带货玩法感兴趣。 说实话&#xff0c;现在AI照片人物对口型工具&#xff0c;越来越逼真&#xff0c;很难辨识出…

Codesys trace工具右键菜单框呼出异常的问题解决

这个问题困扰了好久&#xff0c;添加trace工具之后&#xff0c;一但在模型图位置右键后&#xff0c;整个codesys界面都无法呼出右键菜单&#xff0c;甚至会出现键盘输入失效的问题。 解决办法&#xff1a;更新trace工具 1、工具 —> CODESYS Installer 或者搜索CODESYS In…

AI新时代序幕!大模型研究报告(附AI名词详解)

AI新时代序幕&#xff01;大模型研究报告&#xff08;附AI名词详解&#xff09; 前言AI 大模型研究报告 前言 AI通过大规模的数据训练和先进的算法构建而成的&#xff0c;能够模拟人类的智能&#xff0c;处理各种复杂的任务。它可以理解我们的语言&#xff0c;回答我们的问题&…

PyQt5 statusbar 放图片并设置图片大小和左右间距

在 PyQt5 中&#xff0c;状态栏&#xff08;QStatusBar&#xff09;通常用于显示窗口的状态信息或提示。虽然 PyQt5 的 QStatusBar 没有直接提供设置图片作为状态栏项&#xff08;QStatusBarItem&#xff09;的 API&#xff0c;但你可以通过添加一个 QWidget&#xff08;如 QLa…

Java实现找色和找图功能

某天&#xff0c;张三接到一个任务需求&#xff0c;将一个Excel表格里面的员工信息&#xff0c;录入到员工系统里面&#xff0c;由于数据量非常大&#xff0c;操作起来巨慢。经过一段时间的操作和观察&#xff0c;他发现这种操作&#xff0c;非常有规律&#xff0c;基本就是一些…

html+css+js实现Pagination 分页

效果图 HTML部分 <body><div class"pagination"><button class"prev"><</button><ul><li class"active">1</li><li>2</li><li>3</li><li>4</li><li>5…

基于springboot+vue+mysql公益旧物捐赠系统(源码+参考文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…