stm32f407探索者开发板(二十一)——窗口看门狗

news2024/11/24 1:52:03

文章目录

  • 一、窗口看门狗概述
    • 1.1 看门狗框图
    • 1.2 窗口看门狗工作过程总结
    • 1.3 超时时间
    • 1.4 为什么需要窗口看门狗
    • 1.5 其他注意事项
  • 二、常用寄存器和库函数
    • 2.1 控制寄存器WWDG_ CR
    • 2.2 配置寄存器WWDG_ CFR
    • 2.3 状态寄存器WWDG_SR
  • 三、手写窗口看门狗
    • 3.1 配置过程
    • 3.2 初始化窗口看门狗
    • 3.3 中断服务函数
    • 3.4 主函数

一、窗口看门狗概述

之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。

是存在一口窗口期,只有在窗口期喂狗才能生效。,如果不再窗口期内进行喂狗,则也会复位

1.1 看门狗框图

在这里插入图片描述
也就是第6位0011 1111,开始下一次技术到0100 0000则会进行复位
在这里插入图片描述
配置寄存器就是用来设定窗口,而控制寄存器就是用来进行倒计时的。如果控制寄存器里面的数值大于配置寄存器里面的数值,则会进行复位,如果T6为0则也会进行置位

1.2 窗口看门狗工作过程总结

STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位:

  • 当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
  • 当计数器的数值从0x40减到0x3F时【T6位跳变到0】

如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位

在这里插入图片描述

1.3 超时时间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 为什么需要窗口看门狗

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

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

1.5 其他注意事项

上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。

二、常用寄存器和库函数

2.1 控制寄存器WWDG_ CR

在这里插入图片描述

void WWDG_Enable(uint8_t Counter);//启动并设置初始值
void WWDG_SetCounter(uint8_t Counter);//喂狗

2.2 配置寄存器WWDG_ CFR

在这里插入图片描述

void WWDG_EnablelT(void);// 使能提前唤醒中断
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
void WWDG_SetWindowValue(uint8_t WindowValue);

2.3 状态寄存器WWDG_SR

在这里插入图片描述

FlagStatus WWDG_GetFlagStatus(void);
void WWDG_ClearFlag(void);

三、手写窗口看门狗

3.1 配置过程

使能看门狗时钟:
RCC_APB1PeriphClockCmd();
设置分频系数:
WWDG_SetPrescaler();
设置上窗口值:
WWDG_SetWindowValue();
开启提前唤醒中断并分组(可选):
WWDG_EnableIT();
NVIC_Init();
使能看门狗:
WWDG_Enable();
喂狗:
WWDG_SetCounter();
编写中断服务函数
WWDG_IRQHandler();

3.2 初始化窗口看门狗

u8 WWDG_CNT=0X7F;
//初始化窗口看门狗 	
//tr   :T[6:0],计数器值 
//wr   :W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
 
	NVIC_InitTypeDef NVIC_InitStructure;
 
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE); //使能窗口看门狗时钟
	
	WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT,就是保留0-6,共7位的值
	WWDG_SetPrescaler(fprer); //设置分频值
	WWDG_SetWindowValue(wr); //设置窗口值
//	WWDG_SetCounter(WWDG_CNT);//设置计数值
	WWDG_Enable(WWDG_CNT);  //开启看门狗
	
	NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;  //窗口看门狗中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;  //抢占优先级为2
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子优先级为3
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;  //使能窗口看门狗
	NVIC_Init(&NVIC_InitStructure);
	
	WWDG_ClearFlag();//清除提前唤醒中断标志位
  WWDG_EnableIT();//开启提前唤醒中断
}

3.3 中断服务函数

void WWDG_IRQHandler(void)
{
	WWDG_SetCounter(WWDG_CNT); //重设窗口看门狗值
	WWDG_ClearFlag();//清除提前唤醒中断标志位
	LED1=!LED1;
}

3.4 主函数

如果正常喂狗,LED1会隔一段时间翻转。LED0会开始时亮,之后一直灭,如果产生复位,则LED0亮一下


int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED端口
	KEY_Init();		  	//初始化按键
	LED0=0;				   //点亮LED0
	delay_ms(300);
	WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); 	//计数器值为7f,窗口寄存器为5f,分频数为8	   
	
	while(1)
	{
		LED0=1;  //熄灭LED灯
	}
}

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

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

相关文章

android kotlin 协程(五) suspend与continuation

android kotlin 协程(五) suspend与continuation 通过本篇你将学会: suspendCoroutine{} suspendCancellableCoroutine{} suspend 与 continuation suspendCoroutine 第一次看到这玩意的时候肯定有点身体不适, 先不用管这个东西是什么, 目前为止 只需要知道 suspendCoro…

谈一谈你对View的认识和View的工作流程

都2023年了,不会还有人不知道什么是View吧,不会吧,不会吧。按我以往的面试经验来看,View被问到的概率不比Activity低多少哦,个人感觉View在Android中的重要性也和Activity不相上下,所以这篇文章将介绍下Vie…

【Python工具】WiFi工具

文章目录前言一、介绍二、使用步骤1.完整代码2.简单使用总结免责声明:前言 注意:此工具为自己测试,不可用作恶意使用。 考虑在windows中的wifi破解工具五花八门很多的广告程序,就自己写一个,原理比较简单&#xff0c…

11技术太卷我学APEX-数据加载

11技术太卷我学APEX-数据加载 0 所谓的数据加载 就是导入数据到数据库表中,本示例就采用Excel导入数据到《技术太卷我学APEX》的apex_learn表。表结构大概是这样的 CREATE TABLE "APEX_LEARN" ( "P_ID" NUMBER(17,0) NOT NULL ENABLE, &quo…

PMP真的有那么厉害?你需要考PMP吗?

这个含金量是有的,是目前项目管理界含金量较高的证书,但也要分人, 因为这是职业证书,主要用于提高职场工作能力,不搞这一行的,PMP证书含金量再高也是一张废纸,可以看下下面这张图,这…

【Redis】Redis 的过期策略以及内存淘汰机制详解

Redis 的过期策略以及内存淘汰机制详解1. Redis 的过期策略1.1 如何设置 key 的过期时间?1.2 key 设置且到了过期时间后,该 key 保存的数据还占据内存么?1.3 Redis 如何删除过期的数据1.3.1 定期删除1.3.2 惰性删除2. Redis 的内存淘汰机制2.…

智能新冠疫苗接种助手管理系统

项目背景介绍 近几年来,网络事业,特别是Internet发展速度之快是任何人都始料不及的。目前,由于Internet表现出来的便捷,快速等诸多优势,已经使它成为社会各行各业,甚至是平民大众工作,生活不可缺少的一个重…

【UE4 制作自己的载具】2-导入UE

在上一篇博客中(【UE4 制作自己的载具】1-使用3dsmax制作载具)已经完成了载具模型的制作,本篇需要完成的是将模型导入UE中并进行一些调整。本篇制作步骤:新建一个UE工程,可以添加一个载具模板创建一个“Vehicle”文件夹…

windows服务器上传文件解决方案

1.说明 1.如果上传到linux系统,通常使用ftp相关技术,配合windows端的ftp客户端工具比如FileZilla等进行大文件的上传工作。 2.同理windows服务器也可以开启ftp服务用来传输大文件。 3.本文介绍偷懒方式(常规是开启windows的ftp服务&#xff0…

案例|山东省中医院基于ZABBIX构建网络设备监控预警平台

作者介绍:董晨,山东省中医院信息科机房运维管理 本文从背景、演进、成效来分享建设过程,最终得出结论,类似Zabbix的国产成熟产品市场价值动辄上百万,而我们以极小成本,为医院节省了大量资金,取…

Java多线程(一)--多线程基础知识

1. 为什么要使用并发编程提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了CPU的使用效率&…

通过NPM生态系统中的依赖树揭开脆弱性传播及其演化的神秘面纱

通过NPM生态系统中的依赖树揭开脆弱性传播及其演化的神秘面纱 本文实现了一个依赖约束解析器来解决NPM依赖约束的多样性,并在此基础上构建了一个完整的依赖漏洞知识图(DVGraph),以捕获所有NPM包之间的依赖关系。 https://www.se…

关于thumb2指令下函数运行地址对齐问题及验证固件分析

近期,在分析Thumb2指令的一个固件文件时,发现Thumb2指令集下执行函数的运行地址不对齐? 于是,为了分析一下原因,找了手头上现有的一款基于Cortex3内核的一块板子来实际执行看一下,结合编译后的Hex文件&…

【性能测试】loadrunner(一)知识准备

【性能测试】loadrunner(一)知识准备 目录:导读 1.0. 前言 1.1 性能测试术语介绍 1.2 性能测试分类 1.3 HTTP我们需要知道的 1.4 Loadrunner 12.55安装 1.0. 前言 ​ 在性能测试中,牵扯到了许多比较杂的知识点,…

Java文件IO操作:File类的相关内容

Java文件IO操作一、File类1.相对路径和绝对路径2.路径分隔符(同一路径下、多个路径下)3.实例化4.常见方法一、File类 File类继承自Object类,实现了Serializable接口和Comparable接口; File类属于java.io包; File类是文…

高通平台开发系列讲解(WIFI篇)802.11 基本概念

文章目录 一、WLAN概述二、802.11发展历程三、802.11基本概念沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将基于高通平台介绍802.11基本概念。 一、WLAN概述 WLAN是Wireless Local Area Network的简称,指应用无线通信技术将计算机设备互联起来,构成可以互相通…

Python计算 -- 内附蓝桥题:相乘,三角回文数

计算 ~~不定时更新🎃,上次更新:2023/02/23 🗡常用函数(方法) 1. 求一个整数的最末位 举个栗子🌰 n int(input()) end n % 10蓝桥例题1 - 相乘✖️ 题目描述 本题为填空题,…

【python学习笔记】:输出与输入

01 输出方式 表达式语句、print()函数和使用文件对象的write()方法。 02 输出形式 格式化输出str.format()函数、转成字符串可以使用repr()或str()函数来实现。 (1)repr():产生一个解释器易读的表达形式,便于字符串的拼接。 例:输出平方与…

OpenGL超级宝典学习笔记:着色器存储区块、原子内存操作、内存屏障

前言 本篇在讲什么 本篇为蓝宝书学习笔记 着色器存储区块 原子内存操作 内存屏障 本篇适合什么 适合初学Open的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重…

五月天演唱会门票开售,retry了一小时也没re进去!到底是什么高科技在作祟?!

等待了三年,大型线下演唱会终于回归了!前段时间,文化和旅游部市场管理司发布通知称,自2023年2月16日起,各地文化和旅游行政部门恢复对涉港澳台营业性演出的受理和审批。据中国演出行业协会在业内调研了解,周…