独立看门狗(IWDG)实验

news2024/10/7 12:20:11

独立看门狗简介

单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环, 看门狗电路就是为了避免这种情况的发生 。IWDG(Independent watchdog)独立看门狗,可以用来检测并解决由于软件错误导致的故障,当计数器到达给定的超时值时,会触发一个中断或产生系统复位。独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。

看门狗的作用就是在一定时间内(通过定时计数器实现) 没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启 (发送复位信号) 。

IWDG_KR寄存器

在键值寄存器 (IWDG_ KR)中写入 0xCCCC ,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号 (IWDG_RESET) 。无论何时,只要键寄存器 IWDG_KR 中被写入0xAAAA ,IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位。
IWDG_PR和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555 。 将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA) 也会启动写保护功能。

还有两个寄存器,一个预分频寄存器( IWDG_PR ),该寄存器用来设置看门狗时钟的分频系数 。 另一个重装载寄存器。该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32位寄存器,但是只有低 12 位是有效的 。

在这里插入图片描述

取消寄存器写保护向IWDG_KR写0X5555:

IWDG_WriteAccessCmd(IW DG_WriteAccess_Enable);

设置独立看门狗的预分频系数和重装载值:

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) //设置 IWDG 预分频值
void IWDG_SetReload(uint16_t Reload) //设置 IWDG 重装载值

看门狗溢出时间:

Tout=((4 × 2^prer) × rlr)/40

重载计数值喂狗(向 IWDG_KR 写入 0XAAAA):

IWDG_ReloadCounter(); // 按照 IWDG 重装载寄存器的值重装载 IWDG 计数器

启动看门狗(向 IWDG_KR 写入0XCCCC):

IWDG_ Enable(); // 使能 IWDG

实现目标

用两个IO口,一个用来输入喂狗信号,另外一个用来指示程序是否重启。喂狗我们采用板上的 WK_UP 键来操作,而程序重启,则是通过 DS0 来指示的。

dog.h

#ifndef __WDG_H
#define __WDG_H
#include "stm32f10x_iwdg.h"


void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);

#endif

dog.c

#include"dog.h"
void IWDG_Init(u8 prer,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //① 使能对寄存器I写操作
    IWDG_SetPrescaler(prer); //② 设置IWDG预分频值设置IWDG预分频值
    IWDG_SetReload(rlr); //② 设置IWDG重装载值
    IWDG_ReloadCounter(); // ③ 按照IWDG重装载寄存器的值重装载IWDG计数器
    IWDG_Enable(); //④ 使能IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{
  IWDG_ReloadCounter();//reload
}

main

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "dog.h"



 int main(void)
 {		
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 	LED_Init();		  	 //初始化与LED连接的硬件接口
	KEY_Init();          //按键初始化	 
	delay_ms(500);   	 //让人看得到灭
	IWDG_Init(4,625);    //与分频数为64,重载值为625,溢出时间为1s	   
	LED0=0;				 //点亮LED0
	while(1)
	{
		if(KEY_Scan(0)==WKUP_PRES)
		{
			IWDG_Feed();//如果WK_UP按下,则喂狗
		}
		delay_ms(10);
	};	 
}
  

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

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

相关文章

使用 ArcGIS Pro 进行土地利用分类的机器学习和深度学习

随着技术进步,尤其是地理信息系统 (GIS)工具的进步,可以更有效地对土地利用进行分类。分类的使用可用于识别植被覆盖变化、非法采矿区和植被抑制区域,这些只是土地利用分类的众多示例中的一部分。 分类的一大困难是确定要解决的问题的级别。…

MongoDB 聚合管道中使用数组表达式运算符断言数组($isArray)

数组表达式运算符主要用于文档中数组的操作,接上一篇: MongoDB 聚合管道中使用数组表达式运算符($concatArrays合并数组)https://blog.csdn.net/m1729339749/article/details/130162048本篇我们主要介绍数组表达式运算符中用于断…

在windows上安装部署cicd

安装步骤 下载gitlab-runner,官网地址如下: https://docs.gitlab.com/runner/install/windows.html在任意位置创建文件夹,并把安装程序放入文件夹中 安装gitlab-runner 注意需要使用管理员权限,打开powershell才能运行 cd C:\Gi…

多智能体深度强化学习在移动边缘计算的联合多通道访问和任务卸载中的应用

多智能体深度强化学习在移动边缘计算的联合多通道访问和任务卸载中的应用主要贡献与相关工作比较的贡献三、系统模型(only 2 pages)3.1 网络模型3.2 通信模型3.3 计算模型3.3.1 本地计算3.3.2 卸载计算四、预备知识(only 1 page)五…

Autosar COM Stack系列介绍01_一文看懂各层PDU

本文框架1. 概述1.1 缩写2. OSI模型在Autosar中应用3. 各层PDU介绍3.1 L-PDU3.2 N-PDU3.2.1 N_AI3.2.2 N_PCI3.3 I-PDU1. 概述 在学习Autosar通信栈时中会遇到关于PDU的各种缩写,例如,L-PDU,N-PDU,I-PDU还有SDU等,它们…

Kafka3.0.0版本——生产者自定义分区器

目录一、生产者自定义分区器代码示例1.1、自定义分区器类1.2、生产者发送消息代码(生产者的配置中添加分区器参数)1.3、测试一、生产者自定义分区器代码示例 1.1、自定义分区器类 代码 package com.xz.kafka.producer;import org.apache.kafka.clients.…

Web API学习笔记1(DOM学习)

一、API 和 web API 1API API —— 应用程序编程接口,是给程序员提供的一种工具,以便能更轻松的实现想要完成的功能。可以比作为充电接口 2.Web API 是浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM),主…

HarmonyOS/OpenHarmony应用开发-ArkTS画布组件CanvasRenderingContext2D对象(十一)

measureText measureText(text: string): TextMetrics 该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。 示例: // xxx.etsEntryComponentstruct MeasureText { private settings: RenderingContextSettings new RenderingConte…

机器学习 异常值检测与处理

文章目录一、异常值检测1.1 简单统计1.2 3σ原则检测1.3 箱线图检测1.4 DBScan密度聚类二、异常值处理异常值是指不属于某一特定群体的数据点。它是一个与其他数值大不相同的异常观测值,与良好构成的数据组相背离。在机器学习建模准备数据集时,检测出所有…

Day940.开发分支 -系统重构实战

开发分支 Hi,我是阿昌,今天学习记录的是关于开发分支的内容。 组件化,软件变得更加高内聚、低耦合,开发及维护的效率也更高了,但是组件化的架构又会引入新的复杂度。 举个例子,在重构前我们基于一个模块…

解决Failed to load ApplicationContext问题的思路

中文翻译&#xff1a; 加载ApplicationContext失败 第一步&#xff1a;首先检查测试类的注解 以及 依赖 SpringBootTest <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope…

【数据库复习】第三章关系数据库标准语言SQL 集合查询 2

用EXISTS/NOT EXISTS实现全称量词 SQL语言中没有全称量词" &#xff08;For all&#xff09; 可以把带有全称量词的谓词转换为等价的带有存在量词的谓词&#xff1a; 查询学生S没有选修的课程 查询选修了全部课程的学生姓名。 等价于&#xff1a;查询这样的学生&#xf…

基于灵动微SPIN系列开发的水泵方案介绍 以 MM32SPIN040C/MM32SPIN560C为主控

水泵是输送液体或使液体增压的机械。它将原动机的机械能或其他外部能量传送给液体&#xff0c;使液体能量增加&#xff0c;主要用来输送液体包括水、油、酸碱液、乳化液、悬乳液和液态金属等。 水泵以 MM32SPIN040C/MM32SPIN560C为主控。 水泵方案 MCU: MM32SPIN系列 1.输入…

redis主从复制详解

文章目录主从复制概述主从复制的作用主要包括&#xff1a;数据冗余故障恢复负载均衡高可用基石主从库之间采用的是读写分离的方式读操作写操作主从复制原理全量复制确立主从关系全量复制的三个阶段第一阶段是主从库间建立连接、协商同步的过程&#xff0c;主要是为全量复制做准…

业务逻辑复杂如何解决性能问题

0 前言 上节针对生成订单信息这个接口做了三个阶段的分析定位和优化动作&#xff0c;让TPS变得正常。不过&#xff0c;系统资源并没有完全用起来&#xff0c;这个接口显然还有优化空间。性能优化的过程中&#xff0c;要把资源都用起来。 在性能环境中做优化&#xff0c;把资源…

自动化测试框架之selenium

目录1 自动化测试1.1 单元测试1.2 接口测试1.3 UI测试1.3.1 UI自动化测试的优点&#xff1a;1.3.2 UI自动化测试的适用对象1.4 自动化测试流程2 selenium3 selenium IDE 录制脚本1 自动化测试 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&…

50 openEuler搭建PostgreSQL数据库服务器-配置环境

文章目录50 openEuler搭建PostgreSQL数据库服务器-配置环境50.1 关闭防火墙并取消开机自启动50.2 修改SELINUX为disabled50.3 创建组和用户50.4 创建数据盘50.4.1 方法一&#xff1a;在root权限下使用fdisk进行磁盘管理50.4.2 方法二&#xff1a;在root权限下使用LVM进行磁盘管…

图解HTTP阅读笔记:第5章 与HTTP协作的Web服务器

《图解HTTP》第五章读书笔记 图解HTTP第5章 与HTTP协作的Web服务器5.1 用单台虚拟主机实现多个域名5.2 通信数据转发程序&#xff1a;代理、网关、隧道5.2.1 代理5.2.2 网关5.2.3 隧道5.3 保存资源的缓存5.3.1 缓存的有限期限5.3.2 客户端的缓存第5章 与HTTP协作的Web服务器 5…

学习系统编程No.18【进程间通信之管道实战】

引言&#xff1a; 北京时间&#xff1a;2023/4/11/21:17&#xff0c;今天的文章更新啦&#xff01;但是还是没有上热榜&#xff0c;所以我们需要继续更文啦&#xff01;我相信下一篇博客肯定是可以上热榜的&#xff0c;加油&#xff01;并且今天晚上因为有一节体育课&#xff…

Linux下让进程不再被拉起

Linux下为了防止应用挂掉&#xff0c;我们会设置服务进程来拉起这些应用。但某些流氓软件也会利用该机制使得它们被杀掉后能再被拉起来。本文讲述让这些进程不再被拉起的方法。 比如&#xff0c;有名称为recordmain.bin的进程&#xff0c;使用kill -9 杀掉它后&#xff0c;过几…