当前位置: 首页 > news >正文

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

文章目录

  • 一、窗口看门狗概述
    • 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;  //抢占优先级为2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;					//子优先级为3NVIC_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);//设置系统中断优先级分组2delay_init(168);  //初始化延时函数LED_Init();				//初始化LED端口KEY_Init();		  	//初始化按键LED0=0;				   //点亮LED0delay_ms(300);WWDG_Init(0x7F,0X5F,WWDG_Prescaler_8); 	//计数器值为7f,窗口寄存器为5f,分频数为8	   while(1){LED0=1;  //熄灭LED灯}
}

相关文章:

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

文章目录一、窗口看门狗概述1.1 看门狗框图1.2 窗口看门狗工作过程总结1.3 超时时间1.4 为什么需要窗口看门狗1.5 其他注意事项二、常用寄存器和库函数2.1 控制寄存器WWDG_ CR2.2 配置寄存器WWDG_ CFR2.3 状态寄存器WWDG_SR三、手写窗口看门狗3.1 配置过程3.2 初始化窗口看门狗…...

C++ 模板

1. 泛型编程实现一个通用的交换函数,使用函数重载虽然可以实现,但是有以 下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2. 代码的可维…...

C++中的友元及运算符重载

友元 意义 程序中,有些私有属性也想让类外特殊的一些函数或者类进行访问,就要用到友元技术 关键字 friend 友元的三种实现 全局函数做友元 class Room{friend void test(Person &p);//friend class test;public:string phone_number;private:string…...

五、运行时数据区内部结构、JVM中的线程

内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程种内存申请、分配‘、管理的策略,保证了JVM的高效稳定运行,不同的JVM对于内存的划分方式和管理机制…...

Codeforces Round #848 (Div. 2)A-C

传送门 目录 A. Flip Flop Sum 代码: B. The Forbidden Permutation 代码: C. Flexible String 代码: A. Flip Flop Sum 题意:给你一个长度为n的数组(数组元素只为1或者-1),你要且只能进行…...

机器学习笔记之近似推断(一)从深度学习角度认识推断

机器学习笔记之近似推断——从深度学习角度认识推断引言推断——基本介绍精确推断难的原因虽然能够表示,但计算代价太大无法直接表示引言 本节是一篇关于推断总结的博客,侧重点在于深度学习模型中的推断任务。 推断——基本介绍 推断(Inference\text{…...

指针的进阶

一、字符指针 int main() {char ch w;char* pc &ch;//pc就是字符指针//const char *p "abcdef";//这里其实是把字符串"abcdef"的首地址放入了指针p中//*p w;//这是错误的无法修改值(可以看到这里绿色波浪线警告)char arr[] …...

一元二次方程方程的类

1 问题设计一个一元二次方程的类,其中包括能够反映一元二次方程的属性与操作行为,然后再设计一个测试类,检测类的使用情况。2 方法使用package语句将方程的属性即计算跟的方法封装在一个有包名的类中,包名为tom.jiafei&#xff0c…...

Ask林曦|来回答,30个你关心的日常问题(二)

在林曦老师的线上书法直播课上,上课前后的聊天时间里,时常有同学向林曦老师提问,这些问题涵盖了日常生活的诸多方面,从身体的保养,到快乐的法门,皆是大家感兴趣的,也都共同关切的。   暄桐教室…...

哪款电容笔适合开学季?电容笔和Apple Pencil的区别

其实,市场上一般的电容笔和Apple Pencil的最大差别,就在于Apple Pencil与普通电容笔两者的重量和压感。然而,由于苹果电容笔价格过高,目前电容笔的市场份额逐渐转向平替电容笔,平替电容笔其性能也逐渐得到改善。下面&a…...

Qt之Qprocess

QProcess 可用于完成启动外部程序,并与之交互通信。 一、启动外部程序的两种方式   1)一体式:void QProcess::start(const QString & program,const QStringList &arguments,OpenMode mode ReadWrite)     外部程序启动后&…...

为什么不愿意专升本 学历有什么用

专升本包括两种形式普通专升本和成人专升本。普通专升本毕业是全日制学历,考试仅有一次,错过不能补考所以考生不愿意选择,成人专升本毕业是非全日制学历,学历被国家承认,和普通高校毕业证有相同的使用效力。为何考生不…...

构造函数的使用大全

概述 在C中创建一个对象时,通常需要做一些数据初始化的工作,因此便提供了一个特殊的成员函数 —— 构造函数。一般情况下,并不需要程序员主动调用构造函数,而是在创建对象时,由系统自动调用。构造函数可以由程序员定义…...

ASP.NET Core MVC 项目 IOC容器

目录 一:什么是IOC容器 二:简单理解内置Ioc容器 三:依赖注入内置Ioc容器 四:生命周期 五:多种注册方式 一:什么是IOC容器 IOC容器是Inversion Of Control的缩写,翻译的意思就是控制反转。 …...

ARM工控机/网关- 钡铼技术

一、NXP处理器ARM控制器的介绍 NXP半导体是汽车、穿戴、消费电子等领域中智能机器解决方案的领先供应商。其产品线庞大,包括处理器、微控制器、快速设计平台、ARM控制器等。在物联网控制、汽车电子、安全应用等领域,NXP处理器ARM控制器已成为半导体行业的…...

为什么都在喊数据可视化?它究竟怎么做?

在数字化转型的浪潮中,不论是传统行业,还是新兴行业总会提到“数据可视化”这个词。那数据可视化到底是什么?为什么会受到那么多人追捧?又该怎么才能做到数据可视化呢? 一、数据可视化是什么? 首先“可视…...

nodejs+vue停车场停车位短租系统vscode

目 录前端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后,cd到项目目录执行npm install后生成的文件夹,下载了项目需要的依赖项。 2、…...

物理真机上LUKS结合TPM的测试 —— 使用随机数密钥

1. 创建磁盘空间 命令如下: dd if/dev/zero ofenc.disk bs1M count50 实际命令及结果如下: $ dd if/dev/zero ofenc.disk bs1M count50 输入了 500 块记录 输出了 500 块记录 52428800 字节 (52 MB, 50 MiB) 已复制,0.0587495 s&#xff…...

Linux USB 开发指南

文章目录Linux USB 开发指南1 前言1.1 文档简介1.2 目标读者1.3 适用范围2 模块介绍2.1 模块功能介绍2.2 相关术语介绍2.3 模块配置介绍2.3.1 Device Tree 配置说明2.3.2 board.dts 配置说明2.3.3 kernel menuconfig 配置说明2.4 源码结构介绍2.5 驱动框架介绍2.6 Gadget 配置2…...

FreeRTOS入门(03):队列、信号量、互斥量

文章目录目的队列(queue)信号量(semaphore)互斥量(mutex)互斥量递归互斥量总结目的 FreeRTOS提供给用户最核心的功能是任务(Task),实际项目中通常会有多个任务&#xff…...

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA:从环境配置到模型推理的保姆级教程

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA:从环境配置到模型推理的保姆级教程 航拍图像目标检测一直是计算机视觉领域的难点,尤其是小目标检测问题。无人机拍摄的图像分辨率高、目标密集且尺寸小,传统检测算法往往难以兼顾精度和速度…...

《YOLO11魔术师专栏》专栏介绍 专栏目录

《YOLO11魔术师专栏》将从以下各个方向进行创新(更新日期25.07.23): 【原创自研模块】【多组合点优化】【注意力机制】 【主干篇】【neck优化】【卷积魔改】 【block&多尺度融合结合】【损失&IOU优化】【上下采样优化 】 【小目标…...

用STM32CubeMX配置PWM捕获:从定时器选型到串口输出全流程

STM32CubeMX实战:PWM捕获全流程解析与调试技巧 在嵌入式开发中,精确测量PWM信号的周期和占空比是常见需求。本文将带你从零开始,使用STM32CubeMX和HAL库完成PWM捕获功能的完整实现。不同于简单的教程复制,我们会深入探讨两种捕获…...

学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿

目录 手把手教你学Simulink——基于Simulink的基于扰动观测器(DOB)的负载扰动补偿​ 摘要​ 一、背景与挑战​ 1.1 负载扰动补偿的痛点与传统控制局限​ 1.1.1 应用场景与核心指标​ 1.1.2 传统PI控制的缺陷​ 1.2 DOB负载扰动补偿的核心优势​ 1.3 设计目标​ 二、系…...

茉莉花插件:5分钟快速上手Zotero中文文献智能管理终极指南

茉莉花插件:5分钟快速上手Zotero中文文献智能管理终极指南 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为处理…...

大模型机器人,相对普通机器人有哪些优势?

传统电销与客服正面临效率低、成本高、体验差的三重困境。目前市面上出现了大模型机器人,相对普通机器人可以更深度跟客户沟通首先,什么是大模型机器人外呼?大模型 AI 机器人外呼凭借深度理解、拟人交互、智能决策的核心能力,正成…...

Mac 安装 Java JDK 完整教程:一篇文章讲透安装、配置、多版本管理

一、Java JDK 详解1.1 什么是 JDK?JDK(Java Development Kit,Java 开发工具包)是 Oracle 公司提供的用于 Java 程序开发的完整软件包。它是 Java 开发者不可或缺的核心工具,包含了编写、编译、调试和运行 Java 程序所需…...

告别电量焦虑:用Python+卡尔曼滤波手把手教你DIY一个高精度电池SOC估算器

告别电量焦虑:用Python卡尔曼滤波手把手教你DIY一个高精度电池SOC估算器 每次看到手机电量从20%突然跳到5%,或是电动工具在关键时刻罢工,你是否好奇工程师如何准确预测电池剩余容量?今天我们将用Python和卡尔曼滤波算法&#xff0…...

自然语言理解在AI原生应用领域的关键作用

自然语言理解在AI原生应用领域的关键作用关键词:自然语言理解(NLU)、AI原生应用、大语言模型、多模态交互、意图识别、情感分析、智能交互摘要:本文将深入探讨自然语言理解(NLU)如何成为AI原生应用的“大脑…...

新手福音:在快马平台上零配置完成你的第一个openclaw交互实验

作为一个刚接触AI的新手,想要在本地电脑上跑通openclaw这样的多模态模型,光是环境配置就能劝退一大波人。最近我在InsCode(快马)平台上发现了一个超友好的入门项目,完全不需要折腾环境,打开浏览器就能直接体验openclaw的核心功能。…...