独立看门狗与窗口看门狗
一、简介
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/(42^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(); //清除提前唤醒中断标志位
}
相关文章:

独立看门狗与窗口看门狗
一、简介 STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产…...
【CTF杂项】常见文件文件头文件尾格式总结 各类文件头
常见文件文件头文件尾格式总结及各类文件头 以下是常见文件的文件头格式总结及各类文件头的描述: 图像文件: JPEG:文件头格式为FF D8 FF,文件尾格式为FF D9。PNG:文件头格式为89 50 4E 47 0D 0A 1A 0A,文件…...
深度学习-模型转换_所需算力相关
模型转换相关 tensflow转onnx python -m tf2onnx.convert \--graphdef /root/autodl-tmp/warren/text-detection-ctpn/data/ctpn.pb \--output ./model.onnx --inputs Placeholder:0 --outputs Reshape_2:0,rpn_bbox_pred/Reshape_1:0 pytorch转onnx #!/usr/…...

Koordinator 助力云原生应用性能提升:小红书混部技术实践
作者:宋泽辉(小红书)、张佐玮(阿里云) 编者按: Koordinator 是一个开源项目,是基于阿里巴巴内部多年容器调度、混部实践经验孵化诞生,是行业首个生产可用、面向大规模场景的开源混…...

java中如何使用elasticsearch—RestClient操作文档(CRUD)
目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据,导入到hotel索引库࿰…...
MySQL自定义函数
MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体必须有return语句 且每个sql语句后要以;结尾 所…...
技术学习|CDA level I 数据库应用(数据操作语言DML)
数据操作语言(DML)是对表中记录进行添加、更新、删除等操作的语言。 一、添加数据 在数据表中填充数据有两种方法,第一种方法是使用insert into语句向数据表中直接录入每行数据信息,但并不常用,因为分析使用的数据很…...

关键字:instanceof关键字
在 Java 中,instanceof关键字用于检查一个对象是否是某个特定类或其子类的实例。它的语法如下: 其中,Object是要检查的对象,Class是要检查的类或接口。 instanceof关键字的返回值是一个布尔值,如果对象Object是类Cla…...

【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

年度征文|回顾2023我的CSDN
一年转眼而逝,回顾这一年在csdn的创作,学习,记录历程。回顾过去,才能展望未来,首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右,增加到4000个左右。我年初的目标是粉丝…...
3.无重复字符的最长子串(滑动窗口,C解答)
题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb&quo…...
什么是系统设计 – 学习系统设计
系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。 系统设计涉及识别数据源,它是描述、创建和规划框架以满足特定业务的必要性和先决条件的直觉。 为什么要…...

基于Python的城市热门美食数据可视化分析系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…...

万字长文谈自动驾驶occupancy感知
文章目录 prologue欢迎大家点赞收藏与我交流讨论paper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Predictio…...

KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复
不少小伙伴,求助电脑报错“KBDNO1.DLL文件缺失,软件或游戏无法启动或运行”,应该怎么办? 首先,我们先来了解“KBDNO1.DLL文件”是什么? KBDNO1.DLL是Windows操作系统中的一个动态链接库文件,主…...

计算机网络【EPOLL 源码详解】
IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…...
第82讲:MySQL Binlog日志的滚动
MySQL Binlog日志的滚动 MySQL Binlog日志滚动指的就是产生一个新的Binlog日志,然后进行记录,因为如果都在一个Binlog中记录,查询是非常慢的,检索的效率也很低。 Binlog日志滚动有三种方法: 重启MySQL 数据库一般不重…...
2024.1.3C语言补录 宏函数
在C语言中,宏函数可以使用预处理器指令 #define 来定义。宏函数与常规函数类似,但它们在预处理阶段进行替换,而不是在运行时。 定义:#define 宏名称(参数列表) 宏体 其中: #define 是预处理器指令,用于定义宏。宏名…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Column组件 沿垂直方向布局的容器。 子组件 可以包含子组件。 接…...

快手推荐算法工程师三面回顾
快手三次技术面试一次HR面试的简单回顾,希望对大家有所启发。 一面 面试官一上来就让写算法题,第一个是计算岛屿数量,第二个是最长回文字串。 然后就是介绍自己的论文。对于论文的工作,面试官只是在问关于论文的问题࿰…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...