STM32-窗口看门狗WWDG实验

news2024/12/27 12:52:38

窗口看门狗本质上是一个能产生系统复位信号和提前唤醒中断的定时器。它通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,否则看门狗电路在达到预置的时间周期时,会产生一个MCU复位。

根据系统时钟频率,装载一个初始值到向下计数器值(假设为1000),并且设置一个窗口值(小于装载到计数器的初始值,假设是500)。窗口看门狗一般会确定的窗口下限值是64。

当窗口看门狗启动之后,计数器从1000开始向下减,在减到500之前(1000到500间),是不允许你去喂狗的,一旦喂狗,就会产生复位信号。只有计数器值减到上限值之后和下限值之前(500到64),才允许你去喂狗。当计数器减到下限值(64到0之间),如果喂狗,也会产生复位信号,当减到0之后,自动产生复位信号。所以窗口看门狗实际上就是设置一个窗口(上下限),在这个范围内,你才允许你去喂狗,只要不在这个范围之内,都会复位。

窗口看门狗和独立看门狗的区别是:

1、窗口看门狗计时时间比独立看门狗精准; 窗口看门狗使用的是系统时钟源。

2、窗口看门狗严格限定喂狗时间段,独立看门狗则是只要没有到时间,都能喂狗。

 接下来介绍关于窗口期喂狗的相关知识。

在下图中,我们暂时取最大值T的[6:0]127为例,进行讲解。在定时器启动后,CNT定时器从计数器初始值开始递减,逐渐靠近窗口上限值。当到达窗口下限值0x40(即64)之后,会产生一个中断,使用者自选中断是否触发,到达0x3F时候触达窗口下限,产生复位。下限值64是由系统规定的,是无法由用户进行改变的,但计数器初始值、窗口上限值是可以由用户自定义改变的。

最后介绍输出时间的计算Tout=4096*2^WDGTB*(deltaT+1)/Fwwdg(Fwwdg=36M)

----------------------------------------------------------------------------------

实验要求我们设置计数器值为0x7F,窗口值为0x5F,预分频系数为8(2^WDGTB=8),则此处的计算出的T1为29ms左右,T2为58ms左右。

接下来编写我们的实验程序代码。

首先编写函数头文件wwdg.h:

#ifndef __WWDG_H
#define __WWDG_H

#include "./SYSTEM/sys/sys.h"
#include "./BSP/LED/led.h"

extern WWDG_HandleTypeDef g_wwdg_handle;

void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer);
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg);
void WWDG_IQRHandler(void);
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg);

#endif

接下来再编写函数文件wwdg.c:

#include "./BSP/WWDG/wwdg.h"

WWDG_HandleTypeDef g_wwdg_handle;

void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer){

    g_wwdg_handle.Instance = WWDG;
    g_wwdg_handle.Init.Counter = tr;
    g_wwdg_handle.Init.Window = wr;
    g_wwdg_handle.Init.Prescaler = fprer;
    g_wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE;
    HAL_WWDG_Init(&g_wwdg_handle);
}

void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg){

    if(hwwdg->Instance == WWDG){
        __HAL_RCC_WWDG_CLK_ENABLE();

        HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);
        HAL_NVIC_EnableIRQ(WWDG_IRQn);
    }
}

void WWDG_IQRHandler(void){

    HAL_WWDG_IRQHandle(&g_wwdg_handle);
}

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg){

    LED0_TOGGLE();
}

接下来编写主函数main.c:

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/dalay.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/WWDG/wwdg.h"
#include "./BSP/LED/led.h"

int main(void){

    HAL_Init();
    sys_stm32_clock_init(RCC_PLL_MUL9);
    delay_init(72);
    led_init();
    usart_init(115200);
    wwdg_init(0x7f, 0x5f, WWDG_PRESCALER_8);

    if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET){

        printf("WWDG_RESET\n");
        __HAL_RCC_CLEAR_RESET_FLAGS();
    }
    else{

        printf("External resetting.\n");
    }

    printf("Please feed the wwdg.\n");
    while(1){

        delay_ms(30);
        HAL_WWDG_Refresh(&g_wwdg_handle);
        printf("The WWDG has been fed.\n");
    }
}

如此我们的实验代码便写好了。

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

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

相关文章

代码随想录二刷-队列及其应用题目(JS)【重要】

239.滑动窗口最大值 题目 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗…

Thinkpad-t470电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板Thinkpad-t470 处理器Intel Core i7-6600U 2.6GHz / 3.4Ghz Turbo已驱动 内存16GB DDR4 2666Mhz (SK Hynix)已驱动 硬盘Intel SSD Pro 7600P 51…

与Linux的文件权限有关的知识

在Linux系统中,每个文件都有一个所有者和一个用户组。此外,系统还定义了一个“其他人”分类。 文件的所有者通常是创建该文件的用户,而用户组则是在创建该文件时指定的。如果没有指定,则默认为创建用户的主用户组。用户组可以在文…

核心业务1:账户绑定业务

核心业务1:账户绑定业务 1.业务流程图 2.账户绑定数据库设计 3.账户绑定业务流程 4.代码逻辑 5.代码逻辑细节 核心业务1:账户绑定业务 1.业务流程图 ①用户绑定数据到商户平台(已

C++map/set与unordered系列的区别

文章目录 map/set与unordered系列的区别map/set与unordered系列的性能对比测试总结 map/set与unordered系列的区别 1: map/set遍历时是有序的,unordered_map/unordered_set遍历时是无序的. 以set和unordered_set容器为例: 2: map/set是双向迭代器,底层数据结构为红黑树,unor…

重磅 | Shifu物联网开发框架成为CNCF认证项目

近日,边无际Shifu项目被收录进CNCF云原生全景图,成为了云原生计算基金会认证的项目之一。此次收录证明了Shifu具备了符合CNCF标准的技术能力和良好的社区发展,展现了Shifu在云原生计算领域的实力和可信度,巩固了Shifu在云原生领域…

J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨

介绍 简单来说,上面所有的名字指的都是一个东西 Java Platform, Enterprise Edition 上面的几个名词都是下面的内容的简写: J2EE(Java 2 Platform, Enterprise Edition)Java EE (Java Platform, Enterprise Edition)Jakarta EE(Jakarta Enterprise Edi…

learn_C_deep_1 (C程序补充知识、变量的声明和定义、声明和定义的区别)

目录 C程序补充知识 变量的声明和定义 1.什么是变量? 2.变量的本质是什么? - 所有的变量都要在内存的某个位置开辟空间 3.变量的定义和声明形式、初始化和赋值的区别 4.为什么要定义变量 声明和定义的区别 C程序补充知识 先让我们来看一段C语言…

史上最严宝宝口粮新国标出台,DHA和维生素D可能无需额外补充了

自2023年2月22日起,我国婴幼儿配方食品(以下简称配方奶)新国标开始实施。这意味着2023年2月22日以后在中国上架销售的配方奶必须符合新国标,重新取得国家市场监督管理总局食品评审中心(CFE-SAMR)的注册。这…

【单片机】基于Arduino cli和VS Code配置开发环境,彻底抛弃Arduino IDE

文章目录 0 前言1 VS Code的优势和Arduino IDE的劣势2 前期准备3 Arduino cli3.1 Arduino cli是什么3.2 下载与安装3.3 基本使用3.4 开发环境配置 4 VS Code配置5 参考链接 0 前言 之前有在电脑上基于VS Code配置Arduino环境,大致方法就是在安装Arduino IDE的前提下…

SCT2650STER,可以实现低成本升降压

市面上主流的中高压升降压拓扑方案有四开关管升降压控制芯片、SEPIC/反激控制芯片等。实际上四开关管升降压芯片成本很高,而SEPIC/反激控制芯片设计复杂。 如果仅需要升降压功能,功率较小,不需要隔离时,本篇解决方案将以SCT2650为…

真题详解(地址索引)-软件设计(五十一)

真题详解(单元测试)-软件设计(五十)https://blog.csdn.net/ke1ying/article/details/130189173?spm1001.2014.3001.5501 指令寻址方式 有四种,直接寻址,寄存器寻址,隐含寻址,立即寻址。 按寻…

基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析

【2SFCA的基本思路,可以略过】 对每个供给点j,搜索所有在j搜寻半径(d0)范围内的需求点(k),计算供需比Rj;对每个需求点i,搜索所有在i搜寻半径(d0)范围内的供给点(j),将所有的供需比Rj加总得到i点的可达性Ai。 【数据】 成都市城区绿地数据、各街道小区数据、路网…

基于Rush.js的Monorepo实战

基于Rush.js的Monorepo入门实战 概述 Monorepo是一种软件开发模式,它将多个项目或组件存储在同一个代码库中,而不是将它们分散到多个库中。这样做可以方便跨项目的代码重用、版本控制、依赖管理等,被广泛应用于大型软件公司的开发流程中。 …

动力节点Vue3笔记——Vue程序初体验

目录 一、Vue程序初体验 1.1 下载并安装vue.js 1.2 第一个Vue程序 1.3 Vue的data配置项 1.4 Vue的template配置项 一、Vue程序初体验 可以先不去了解Vue框架的发展历史、Vue框架有什么特点、Vue是谁开发的,对我们编写Vue程序起不到太大的作用,…

C语言从入门到精通第4天(1~3天的扩展)

1~3天的扩展 拓展数据类型sizeof关键字整型数据的打印格式字符类型的输出格式ASCII码表转义字符进制 拓展数据类型 在开发过程中我们需要处理各种类型的数据,C语言处理基本类型还有其他的类型: sizeof关键字 C语言中可以通过sizeof关键字获取某个数据…

Java源码(三)SpringBoot Web容器应用上下文

思维导图 本文主要分析ServletWebServerApplicationContext源码 SpringBoot Web容器应用上下文(这是个人的翻译, 如有不足之处还望指出, 大佬勿喷!!!) 1.自我思考及复盘 备注: 自我思考及复盘是为了养成带着问题阅读源码及阅读完源码后总结…

echarts 雷达图

Echarts 常用各类图表模板配置 注意: 这里主要就是基于各类图表,更多的使用 Echarts 的各类配置项; 以下代码都可以复制到 Echarts 官网,直接预览; 图标模板目录 Echarts 常用各类图表模板配置一、雷达图二、环形图三…

27 个Python数据科学库实战案例 (附代码)

为了大家能够对人工智能常用的 Python 库有一个初步的了解,以选择能够满足自己需求的库进行学习,对目前较为常见的人工智能库进行简要全面的介绍。 1、Numpy NumPy(Numerical Python)是 Python的一个扩展程序库,支持大量的维度数组与矩阵运算…

US News退榜风波后,发布最新美国最佳法学院和医学院排名

从2022年11月开始,美国权威排名机构US News不断陷入风波。耶鲁大学法学院率先宣布退出US News法学院排名,先是法学院,后是医学院,包括哈佛大学大学、斯坦福大学、哥伦比亚大学和加州大学伯克利分校等名校也纷纷宣布退出。 这些老…