窗口看门狗(WWDG)实验

news2024/9/24 9:26:17

窗口看门狗

窗口看门狗(WWDG )通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
除非递减计数器的值在 T6 位( WWDG -->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置 寄存器 (WWDG -->CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个 MCU 复位。递减计数器需要在一个有限的时间窗口中被刷新。

在窗口看门狗的递减计数器递减至窗口配置寄存器配置的上窗口(W[6:0])之前,是不能刷新递减计数器的数值(喂狗操作)的;同样,在递减计数器递减到下窗口(0x3F)之后,也是不能刷新递减计数器的数值(喂狗操作)的,否则这两种状况都会产生复位信号的。也就是说,喂狗操作只能发生在上、下窗口之间。
在这里插入图片描述

窗口看门狗的必要性:

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;

如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。

窗口看门狗超时公式:

Twwdg=(4096 × 2^ WDGTB × (T [5:0]+1)) /Fpclk1

Twwdg:WWDG 超时时间 (单位为 ms)
Fpclk1:APB1 的时钟频率(单位为 Khz)
WDGTB:WWDG 的预分频系数
T[5:0] :窗口看门狗的计数器低 6 位

在这里插入图片描述

寄存器

控制寄存器(WWDG_CR):

在这里插入图片描述
配置寄存器(WWDG_CFR):

在这里插入图片描述
状态寄存器(WWDG_SR):

该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位 0 有效,其他都是保留位。当计数器值达到 40h 时,此位由硬件置 1 。它必须通过软件写 0 来清除。对此位写 1 无效。 即使中断未被使能, 在计数器的值达到 0X40的时候,此位也会被置此位也会被置11。

使能WWDG时钟:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能

设置窗口值和分频数:

void WWDG_SetWindowValue(uint8_t WindowValue);//设置窗口值
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//设置分频数

开启 WWDG 中断并分组:

WWDG_EnableIT(); // 开启窗口看门狗中断

设置计数器初始值并使能看门狗:

void WWDG_Enable(uint8_t Counter);

main

通过 DS0 来指示 STM32 是否被复位了,如果被复位了就会点亮 300ms 。 DS1 用来指示中
断喂狗,每次中断喂狗翻转一次。

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "dog.h"


 int main(void)
 {		
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
 	LED_Init();	 
	LED0=0;
	delay_ms(300);	  
	WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//计数器值为7f,窗口寄存器为5f,分频数为8	   
 	while(1)
	{
		LED0=1;			  	   
	}   
}

dog.c

#include"dog.h"
#include "led.h"

//保存WWDG计数器的设置值,默认为最大. 
u8 WWDG_CNT=0x7f; 
void WWDG_Init(u8 tr,u8 wr,u32 fprer)//初始化WWDG
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG
	
	WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.   
	WWDG_SetPrescaler(fprer);设置IWDG预分频值

	WWDG_SetWindowValue(wr);//设置窗口值

	WWDG_Enable(WWDG_CNT);	 //使能看门狗 ,	设置 counter .                  

	WWDG_ClearFlag();//清除提前唤醒中断标志位 

	WWDG_NVIC_Init();//初始化窗口看门狗 NVIC

	WWDG_EnableIT(); //开启窗口看门狗中断
	
}
void WWDG_Set_Counter(u8 cnt)       //设置WWDG的计数器
{
	 WWDG_Enable(cnt);//使能看门狗 ,	设置 counter .
}
void WWDG_NVIC_Init(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //WWDG中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //抢占2,子优先级3,组2	
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	 //抢占2,子优先级3,组2	
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; 
	NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}
void WWDG_IRQHandler(void)
	{

	WWDG_SetCounter(WWDG_CNT);	  //当禁掉此句后,窗口看门狗将产生复位

	WWDG_ClearFlag();	  //清除提前唤醒中断标志位

	LED1=!LED1;		 //LED状态翻转
	}

dog.h

#ifndef __WDG_H
#define __WDG_H
#include "sys.h"


void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);

void WWDG_Init(u8 tr,u8 wr,u32 fprer);//初始化WWDG
void WWDG_Set_Counter(u8 cnt);       //设置WWDG的计数器
void WWDG_NVIC_Init(void);
#endif

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

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

相关文章

ROS小乌龟话题改写--话题发布--话题订阅

创建小乌龟 roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key2:图显示: rqt_graphtest02_sub_pose 3:通过命令显示话题名消息信息 方法一获得: rostopic info /turtle1/cmd_vel方法二获得&#…

Linux 提权学习

提权的目的是获取 root 权限 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展 暴力破解 suid 提权 内核漏洞提权 定时任务提权 sudo 提权 第三方服务提权(docker、mysql、redis、NFS提权…

量子退火Python实战(4):PyQUBO使用攻略 MathorCup2023加油!

文章目录 前言一、约束部分的QUBO怎么求?二、PyQUBO的输出结果怎么不是QUBO矩阵?三、我的建模太复杂了,可以不用PyQUBO吗?四、怎么构建sum(x_1...x_i) K的约束?总结 前言 提示:本教…

3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(上) | 达索系统百世慧®

基于3DEXPERIENCE单一数据源、实时多专业协同平台;传统CATIA建模附加全新CATIA柔性快速建模技术;CATIA原生概念建模仿真一体化模型;一模两用,快速建模与变更、多学科快速验证与自动优化、支持快速概念方案决策;仿真效率…

快手社招Java后端开发岗面试,被问麻了

社招面试是基于你的工作项目来展开问的,比如你项目用了 xxx 技术,那么面试就会追问你项目是怎么用 xxx 技术的,遇到什么难点和挑战,然后再考察一下这个 xxx 技术的原理。 今天就分享一位快手社招面经,岗位是后端开发&…

日常记录:天梯赛练习集L1-044 稳赢

题目: 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需…

软件测试能干多久?测试员能干到多大年龄?

测试员可以工作多少年?大多数人认为软件测试是吃青春饭的工作。只能干到30岁,最长可达35岁。我经常听到这样的话,都让人倍感压力。今天,我们来谈谈这个老话题… 软件测试能干多久? 软件测试并没有明确的职业寿命限制&#xff…

【高项】项目的概念,项目管理基础与立项管理

【高项】项目的概念,项目管理基础与立项管理 文章目录1、什么是项目?项目的概念2、项目管理知识体系2.1 组织结构对项目的影响2.2 信息系统项目的生命周期2.3 单个项目的管理过程3、立项管理3.1 熟悉立项的流程(申请书->可行性->评估-&…

【《C Primer Plus》读书笔记】第16章:C预处理器和C库

【《C Primer Plus》读书笔记】第16章:C预处理器和C库16.1 翻译程序的第一步16.2 明示常量:#define16.2.1 记号16.2.2 重定义常量16.3 在#define中使用参数16.3.1 用宏参数创建字符串:#运算符16.3.2 预处理器黏合剂:##运算符16.3.…

@SpringBootApplication详细分析

如下图 SpringBootApplication是springboot项目启动类的注解,也是程序的入口,本文就是具体解析一下这个注解到底做了什么 一.SpringBootApplication的构成 1.这个注解是一个组合注解,他是有三个注解合成的,对应图中的123步,而这三…

【HDR图像处理】HDR图像的色调映射 | python+opencv代码实现总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前提opencv知识1.1、opencv打开一般照片并且显示1.2、opencv打开HDR图像(这里先不讲如何imshow) 二、经典的色调映射技术以及opencv…

Web 攻防之业务安全:密码找回流程绕过测试.(利用链接跳到后面去)

Web 攻防之业务安全:密码找回流程绕过测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所…

MATLAB | 优化工具箱(optimization toolbox)改版后的live editor工具咋用

优化工具箱(optimization toolbox)改版后的live editor工具咋用?本来是不咋想讲这玩意的,但奈何问的人还不少,这里简单讲一下咋用哈。 很多人下了比较新版本MATLAB就顺手像往常一样点开了优化工具箱,但是熟悉的优化APP界面却并没…

网络安全学习路线,小白必备

前言: 趁着今天下班,我花了几个小时整理了下学习路以及我的学习心得,非常不易,希望大家可以点赞收藏支持一波,谢谢。 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在…

BPM流程引擎升级,让流程管理更简单!

BPM是Business Process Management的缩写,即业务流程管理。 它是一种以构造端到端的业务流程为中心,以持续提高组织业务绩效为目的的系统化方法。通常,BPM也指流程管理的信息化系统。 BPM对企业很多应用场景都有价值,总的来说&am…

Web 攻防之业务安全:验证码绕过测试.(修改数据包中 res_code 的值 实现绕过.)

Web 攻防之业务安全:验证码绕过测试. 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所提供…

【Linux系统管理进程,运行,挂起,杀死进程和crontab计划任务表的使用以及实验的心得体会】

实验 (1)显示本用户的进程,重定向到file1 top命令如果不加限制,默认是查看所有用户的进程情况top -u [用户名] 可以查看该用户名的所有进程 (2)显示本用户所有进程,重定向到file2 top命令如果…

扩展c盘时,如何删除恢复分区

目录 一、前言 二、操作步骤 一、前言 有没有和小编一样想要扩展自己c盘容量时遇到问题的? 就是发现c盘和自己扩展的容量之间有个恢复分区,主要是磁盘管理器那里还删不掉? 就不知道怎么办了,小编摸索了一下最终解决了现在分享…

网络IO(non-blocking io)基础

BIO(blocking io) 传统的网络io模式,面向流,一个线程对接一个会话,因此高并发时会因线程阻塞而性能低效 Java代码: public class BIO implements Connector {private Integer port 8080;Overridepublic v…

前端学习:HTML颜色(什么是RGB、HEX、HSL)

一、什么是RGB、HEX、HSL? 无论是RGB、HEX、HSL,它们的作用只有一个:用数字表达出一种颜色。 1.RGB RGB通过输入的数值,将红色、绿色和蓝色的光源以一定的量混合在一起,形成颜色。 软件中通常让你输入Red、Green、B…