独立看门狗与窗口看门狗

一、简介

STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

二、独立看门狗

独立看门狗由专门的低速时钟(LSI)驱动,即便是主时钟发生故障它仍能够有效,所以此狗狗可以工作在与主时钟无关的要求下,或者待机模块下。
独立看门狗一旦开启,只能由MCU复位后才清除,让它不再工作。
独立看门狗的时钟是一个内部RC时钟,它会在30KHZ到60KHZ之间变化,并非是精确的40KHZ,而只是一般计算时取40KHZ。
喂狗时间计算:
1S喂狗所需的计数:40K/(42^预分频值);
喂狗时间=重装载值/1S喂狗所需的计数
例IWDG_Init(4,625); 与分频数4,重载值为625,溢出时间为1s
40K/(4
2^4)=625 625/625=1S
独立看门狗需要设置四个寄存器:
1、预分频寄存器(IWDG_PR),其低三位PR[2:0](Prescaler divider)有效。可设置4、8、16、32、64、128、256多种预分配系数。
2、重装载寄存器(IWDG_RLR)低12位RL[11:0]: 用来设置计数器的重装载值。
3、键寄存器(IWDG_KR),用来控制去除IWDG_PR和IWDG_RLR写保护功能以便正常写值。 向此寄存器写入0x5555则暂时去除IWDG_PR和IWDG_RLR的写保护功能才可向两个寄存器中写值;
向此寄存器写入0xAAAA则IWDG_RLR的值会重装载,防止MCU复位;
向此寄存器写入0xCCCC是开启狗立看门狗动作;
4、状态寄存器(IWDG_SR)最低两位有效RVU: 看门狗计数器重装载值更新 (Watchdog counter reload value update) 标识位和PVU: 看门狗预分频值更新(Watchdog prescaler value update) 标识位,分别用来指示此时是否可向IWDG_RLR 和 IWDG_PR写值,此寄存器由硬件置1与清0,只有当为0时才可向上面两个寄存器写值。

void IWDG_Init(u8 prer,u16 rlr) 
{	
//向键寄存器(IWDG_KR)写入0x5555使能对寄存器IWDG_PR和IWDG_RLR的写操作 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 
//设置IWDG预分频值:设置IWDG预分频值为64 	IWDG_SetPrescaler(prer);  //设置IWDG重装载值IWDG_SetReload(rlr);   
//向键寄存器(IWDG_KR)写入0xAAAA,重装载IWDG计数器  IWDG_ReloadCounter();  //向键寄存器(IWDG_KR)写入0xCCCC是开启狗立看门狗动作IWDG_Enable();  //使能IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{   IWDG_ReloadCounter();										   
}

三、窗口看门狗

在这里插入图片描述

窗口看门狗是用APB1总线驱动的,时钟频率最大36MHz。窗口看门狗的有两个值:窗口的上限值,上限值由用户独立设置;窗口的下限值,下限值固定为0X40。
窗口看门狗计数器的值必须在上限值和下限值之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义。
窗口看门狗递减计数器递减到 0X40 的时候,还不会马上产生复位,如果使能了提前唤醒中断: CFR 位 9EWI 置 1,则产生提前唤醒中断。
在这里插入图片描述

1、使能 WWDG 时钟
WWDG使用的是 PCLK1 的时钟,需要先使能时钟。
void RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
2设置分频数:配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
3、设置看门狗的窗口上限值:设置窗口值:配置寄存器(WWDG_CFR) 第0至第6位
void WWDG_SetWindowValue(uint8_t WindowValue);
4、开启 WWDG 中断:配置寄存器(WWDG_CFR) 第9位
void WWDG_EnableIT();
5、中断优先级配置,
WWDG_NVIC_Init();
6、设置计数器初始值并使能看门狗:控制寄存器(WWDG_CR) 第0至第7位
void WWDG_Enable(uint8_t Counter);
7、 编写中断服务函数
通过该函数来喂狗,在中断服务函数里将状态寄存器的 EWIF 位清空。

void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{ 
//   WWDG时钟使能	
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);  
//设置IWDG预分频值:配置寄存器(WWDG_CFR)的第8位和第7位WDGTB[1:0]WWDG_SetPrescaler(fprer);
//设置窗口值:配置寄存器(WWDG_CFR) 第0至第6位WWDG_SetWindowValue(wr);	
//使能看门狗 ,设置计数器初值:控制寄存器(WWDG_CR)  第0至第7位               
WWDG_Enable(tr);	 
//状态寄存器(WWDG_SR) 0位   提前唤醒中断标识清零WWDG_ClearFlag();    
//初始化窗口看门狗 NVICWWDG_NVIC_Init();
//开启窗口看门狗中断  配置寄存器(WWDG_CFR) 第9位} WWDG_EnableIT(); 
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{WWDG_Enable(cnt);	 
}
//窗口看门狗中断服务程序
void WWDG_NVIC_Init()
{NVIC_InitTypeDef NVIC_InitStructure;//WWDG中断NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;    //抢占2,子优3,组2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	 //抢占2,子优先级3,组2NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}void WWDG_IRQHandler(void)
{// Update WWDG counterWWDG_SetCounter(0x7F);	  //当禁掉此句后,窗口看门狗将产生复位// Clear EWI flag */WWDG_ClearFlag();	  //清除提前唤醒中断标志位
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSL/TLS 握手过程详解

SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…

UDP单播

CMakeLists.txt文件中添加如下行&#xff1a; link_libraries(ws2_32) 1.发送端 #include <iostream> #include <winsock2.h> #include <cstdio>#pragma comment(lib, "Ws2_32.lib") // Link with ws2_32.libint main() {1.Initialize winsock…

全网独家:基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器

近期想测试一下opengauss数据库,官网上单机容器部署只有x86-64平台CentOS 7.6和ARM64平台 openEuler20.03 LTS两种底包方案。本文系全网独家在x86平台上基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器。 opengauss官网上单机容器部署只有x86-64平台Cent…

按摩上门预约小程序源码系统 开发组合:PHP+MySQL 附带完整的搭建教程

现代生活节奏的加快&#xff0c;人们越来越注重健康与放松。按摩作为传统的舒缓方式&#xff0c;市场需求逐年上升。然而&#xff0c;传统的按摩服务预约方式较为繁琐&#xff0c;用户需拨打热线电话或前往实体店进行预约&#xff0c;这无疑增加了用户的操作成本。因此&#xf…

C#的checked关键字判断是否溢出

目录 一、定义 二、示例&#xff1a; 三、生成&#xff1a; 一、定义 使用checked关键字处理溢出。 在进行数学运算时&#xff0c;由于变量类型不同&#xff0c;数值的值域也有所不同。如果变量中的数值超出了变量的值域&#xff0c;则会出现溢出情况&#xff0c;出现溢出…

【ModelScope】从入门到进阶

计算机视觉任务 任务&#xff08;Task&#xff09;中文任务&#xff08;Task&#xff09;英文任务说明单标签图像分类image-classification对图像中的不同特征根据类别进行区分通用图像分割image-segmentation识别图像主体与图像背景进行分离文字检测ocr-detection将图像中的文…

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…

汉诺塔问题(递归超详细)C++,leetcode

文章目录 前言一、题目分析二、算法原理1.为什么要用递归2.如何编写代码 三、代码实现总结 前言 在本文章中&#xff0c;我们将要详细介绍一下汉诺塔问题&#xff0c;本题目我们采用递归的方式解决相关的内容 一、题目分析 题目要求详解&#xff1a;   &#x1f31f; 有三个…

css原子化的框架Tailwindcss的使用教程(原始html和vue项目的安装与配置)

安装教程 中文官网教程 原始的HTML里面使用 新建文件夹npm init -y 初始化项目 安装相关依赖 npm install -D tailwindcss postcss-cli autoprefixer初始化两个文件 npx tailwindcss init -p根目录下新建src/style.css tailwind base; tailwind components; tailwind ut…

【python入门】day12:bug及其处理思路

bug的常见类型 粗心 / 没有好习惯 思路不清 lst[{rating:[9.7,2062397],id:1292052,type:[犯罪,剧情],title:肖申克的救赎,actors:[蒂姆罗宾斯,摩根弗里曼]},{rating:[9.6,1528760],id:1291546,type:[剧情,爱情,同性],title:霸王别姬,actors:[张国荣 ,张丰毅 , 巩俐 ,葛优]},{r…

卷麻了,00后测试用例写的比我还好,简直无地自容...........

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…

linux性能优化

文章目录 性能优化图CPU进程和cpu原理性能指标 性能优化图 CPU 进程和cpu原理 进程与线程&#xff1a; 进程是程序的执行实例&#xff0c;有自己的地址空间和系统资源。线程是进程内的执行单元&#xff0c;共享进程的资源。在多核系统中&#xff0c;使用多线程可以更好地利用多…

Web 自动化测试过程中会遇到哪些问题?

作者&#xff1a;木可 链接&#xff1a;https://www.zhihu.com/question/636965892/answer/3341410674 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 Web自动化是指使用测试脚本来自动执行网页上的任务。这包括填…

mybatis快速批量插入工具类

代码示例&#xff1a; package com.ly.cloud.util; import java.util.List;import javax.annotation.PostConstruct; import javax.annotation.Resource;import com.google.common.collect.Lists; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.s…

Linux Debian12安装和使用ImageMagick图像处理工具 常见图片png、jpg格式转webp格式

一、ImageMagick简介 ImageMagick是一套功能强大、稳定而且免费的工具集和开发包。可以用来读、写和图像格式转换&#xff0c;可以处理超过100种图像格式&#xff0c;包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。对图片的操作&#xff0c;即可以通过命令行进行&am…

派可数据BI 助力生产企业数字化质量管理,全面提升产品品质

在制造业中&#xff0c;出了质量问题&#xff0c;生产和质检部的同事都先抱怨。大家觉得质量问题是品控部门的问题&#xff0c;生产质量有瑕疵&#xff0c;检验人员就要负责。而检验人员又觉得&#xff0c;品质是生产出来的&#xff0c;而不是检验出来的&#xff0c;只有在生产…

服务器为什么大多用 Linux?

服务器为什么大多用 Linux&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…

1.3 金融数据可视化

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1.1 编程基础   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas 1.2 金融数据处理 1.3 金融数据可视化 文章目录 1. 金融数据可视化1.1. matplotlib1.1.1. 沪深300走势图1.1.2. 日线均线…

计算机网络-动态路由

网络层协议&#xff1a;ip&#xff0c;ospf&#xff0c;rip&#xff0c;icmp共同组成网络层体系 ospf用于自治系统内部。 一个路由器或者网关需要能够支持多个不同的路由协议&#xff0c;以适应不同的网络环境。特别是在连接不同自治系统的边缘路由器或边界网关的情况下&#…

Qt之自定义分页(翻页)控件

当数据量较大时,分页显示是个不错的选择。这里用百家姓来演示分页效果,包括首页、上一页、下一页、尾页和跳转。 一.效果 每页15个姓氏。 二.实现 QHPageWidget.h #ifndef QHPAGEWIDGET_H #define QHPAGEWIDGET_H#include <QWidget> #include <QStandardItemMod…