STM32F4之看门狗

news2024/12/23 16:17:20

1、 看门狗作用

单片机复位的方式:硬件复位 -- reset按键

上电复位 -- 电容

看门狗复位

看门狗的复位功能主要是用于一些平常难以操作的场合去帮助我们进行复位操作。当你单片机突然死机或者程序跑飞了,看门狗就可以检测得到并且及时帮你复位。看门狗也可以帮助提高系统的可靠性。看门狗本质就是一个计数器。

2、STM32的看门狗分类

此器件具有两个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序

3、独立看门狗

STM32独立看门狗简介

自由运行递减计数器
时钟由独立 RC 振荡器提供(可在待机和停止模式下运行)

当递减计数器值达到 0x000 时产生复位(如果看门狗已激活)

当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位
值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)。
任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计
数器,从而避免产生看门狗复位。

看门狗要开始工作:要往IWDG_KR寄存器里写入0xCCCC接下来看门狗就会开始从IWDG_RLR 的值开始递减。如果一直减到0都没有给它写入0xAAAA,就会产生一次复位,此时来指示当前系统出问题了。这个总体的时间是可以自己决定的。

看门狗饿了,就要喂它,不喂它就咬你

 独立看门狗框架

独立看门狗寄存器

IWDG_PR和IWDG_RLR是受到写保护的

要解除写保护就要往KR寄存器里写入0x5555的值

频率是在30kHZ到60kHZ之间变化:

Psc:4分频, RLR:1000

最早喂狗时间:4 / 60000 * 1000= 66.7ms

最晚喂狗时间:4 / 30000 * 1000 = 132ms

喂狗时间应该挑早喂的

解除写保护(往KR寄存器写0x5555)

预分频值(往PR寄存器写值)

重装载值(往RLR寄存器写值)

先让重装载值加载到计数器里(往KR寄存器写0xaaaa)

启动看门狗(往KR寄存器写0xcccc)

#include "iwdg.h"
/************************************
函数功能:独立看门狗的初始化
函数形参:u8 prer, u16 rlr
函数返回值:void
函数说明:
作者:
日期:
************************************/
void IWDG_Init(u8 prer, u16 rlr)
{
	//解除写保护
	IWDG->KR = 0X5555;
	//预分频值(往PR寄存器写值)
	IWDG->PR = 0;
	//重装载值(往RLR寄存器写值)
	IWDG->RLR = 5000;
	//启动看门狗
	IWDG->KR = 0XCCCC;
}

4、窗口看门狗

窗口看门狗特征

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位变成 0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位(过晚喂狗)。如果在递减计数器达到窗口寄存器值之前刷新控制寄存器中的 7 位递减计数器值,也会产生 MCU 复位(过早喂狗)。这意味着必须在限定的时间窗口内刷新计数器

可编程的自由运行递减计数器
    复位条件
       
当递减计数器值小于 0x40 时复位(如果看门狗已激活)--过晚喂狗
       
在窗口之外重载递减计数器时复位(如果看门狗已激活)-- 过早喂狗
   
提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)

 窗口看门狗框架

Twwdg = 42M*4096 * 8 -- 代表每减一次的时间

当前从0x7f开始递减到0x40所需要的时间

现在如果是8分频,则每减一次的时间是:0.00078s = 0.78ms = 780us

窗口看门狗寄存器

位7:代表使能窗口看门狗

位6:0--计数器的值

位9:代表使能窗口看门狗的中断

位8:7 -- 代表当前的分频值

位6:0 -- 代表需要设置的窗口值

进入中断就需要靠这个标志位

不用中断这个标志位也会置1,只是不会进入中断服务函数

打开WWDG的时钟

写入分频值(CFR寄存器里的WDGTB)--决定记一次数的时间

写入重装载值(CR寄存器里的0-6位)

设置窗口值

使能窗口看门狗的中断

配置优先级

核心响应中断

使能看门狗

编写中断服务函数

注意:使用窗口值的时候,需要把CR1寄存的相关操作提前到设置窗口值之前,否则就会一直复位,

#include "wwdg.h"
/************************************
函数功能:窗口看门狗的初始化
函数形参:u8 prer, u16 rlr
函数返回值:void
函数说明:选择8分频,每减一次需要78us
	Twwdg = 42M*4096*8----代表每减一次的时间
	当前从0x7f降到0x40所需的时间
	现在如果是八分频,则没减一次的时间是0.00078s = 0.78 ms = 78us
作者:
日期:
************************************/
void WWDG_Init(void)
{
	//1.打开WWDG时钟
	RCC->APB1ENR |= 0X1 << 11;
    //2. 写入分频值(往PR寄存器写值)
	WWDG->CFR |= 0x3 << 7;

    //3. 写入重装载值(往CR寄存器写值)
	WWDG->CR |= 0X7F;
	//8. 使能窗口看门狗
	WWDG->CR |= 0X1 << 7;
    //4. 设置窗口值
	WWDG->CFR &= ~(0X7F<<0);
	WWDG->CFR |= 0X6F<<0;

    //5. 使能窗口看门狗的中断
	WWDG->CFR |= 0X1 << 9;
    //6. 配置中断优先级
	NVIC_SetPriority(WWDG_IRQn,NVIC_EncodePriority(7-2,1,1));
    //7. 使能核心响应中断
	NVIC_EnableIRQ(WWDG_IRQn);


}	
//10. 编写中断服务函数
void WWDG_IRQHandler(void)
{
	//清零操作
	WWDG->SR &= ~(0X1 << 0);
	WWDG->CR |= 0X7F;
	printf("窗口看门狗\r\n");
}
/************************************
函数功能:喂窗口看门狗
函数形参:void
函数返回值:void
函数说明:
	
作者:
日期:
************************************/
void WWDG_feed(void)
{
	WWDG->CR |= 0X7F;//喂狗
}

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

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

相关文章

74hc595模块参考

74hc595模块参考 8位串行并行输出&#xff08;SIPO&#xff09;移位寄存器 使用74HC595移位寄存器扩展微控制器上的输出引脚数量。如果你需要扩充输入引脚的数量那么你需要74HC165移位寄存器。 SER&#xff08;串行输入&#xff09;引脚用于一次一位地将数据发送到移位寄存器…

(离散数学)逻辑连接词

异或可以理解为不同为1相同为0 P->Q的前件和后件满足0->1的其中一个就为真 <—>可以看做 &#xff0c;相同为1不同为0 异或与等价相反

Torch Hub 系列#2:VGG 和 ResNet

一、说明 在上一篇教程中,我们了解了 Torch Hub 背后的本质及其概念。然后,我们使用 Torch Hub 的复杂性发布了我们的模型,并通过相同的方式访问它。但是,当我们的工作要求我们利用 Torch Hub 上提供的众多全能模型之一时,会发生什么? 在本教程中,我们将学习如何利用称为…

MySQL:日志系统

目录 概述错误日志&#xff08;error log&#xff09;慢查询日志&#xff08;slow query log&#xff09;一般查询日志( general log )中继日志&#xff08;relay log&#xff09;Buffer Pool 缓存回滚日志&#xff08;undo log)概述undo log 作用undo log 的存储机制Undo log …

WorkPlus Meet:局域网内部使用的高效视频会议系统

随着全球化和远程办公的趋势&#xff0c;视频会议已成为现代企业和机构不可或缺的沟通工具。而现在&#xff0c;大多数政企单位或者涉密强的企业&#xff0c;都会使用局域网部署的音视频会议系统&#xff0c;提供更高的安全性和隐私保护。因为音视频会议中可能涉及到公司机密和…

Angular 使用教程——基本语法和双向数据绑定

Angular 是一个应用设计框架与开发平台&#xff0c;旨在创建高效而精致的单页面应用 Angular 是一个基于 TypeScript 构建的开发平台。它包括&#xff1a;一个基于组件的框架&#xff0c;用于构建可伸缩的 Web 应用&#xff0c;一组完美集成的库&#xff0c;涵盖各种功能&…

基于SSM的考研图书电子商务平台的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

HDMI之编码篇

概述 HDMI 2.0b(含)以下版本,采用3个Channel方式输出。传输又分为3三种周期,视频数据,数据岛以及控制周期。视频传输采用8/10编码。数据岛采用4/10编码(TERC4)。控制周期采用2/10。编码都拓展成了10bits。 上图中,Pixel component(e.g.B)->D[7:0]表示视频数据周期…

linux之IPC

linux之IPC 什么是IPC共享内存(shm)ftokshmgetshmatshmdtshmctl 消息队列msggetmsgrcvmsgsndmsgctl 旗语(信号量)semgetsemctlsemopsem三级标题三级标题 ipc命令守护进程查看守护进程 什么是IPC IPC: Inter(内核) Process(进程) Communicton&#xff08;通信&#xff09; 共享内…

【Delphi】 各个平台使用 ntfy 效果说明

目录 一、Delphi 中使用 ntfy 库下载地址 二、各个平台使用效果说明 1. android 平台 2. ios 平台 3. windows 平台 三、总结 一、Delphi 中使用 ntfy 库下载地址 官方的文档地址&#xff1a;ntfyDelphi 接口库地址&#xff1a;GitHub - hazzelnuts/ntfy-for-delphi at …

冯·诺依曼结构

一、约翰冯诺依曼---计算机之父 约翰冯诺依曼&#xff08;John von Neumann&#xff0c;1903年12月28日—1957年2月8日&#xff09;&#xff0c;出生于匈牙利布达佩斯&#xff0c;匈牙利裔美籍数学家、计算机科学家、物理学家和化学家&#xff0c;美国国家科学院院士&#xff…

OpenCV:图像旋转与缩放

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

linux入门---自旋锁和读写锁

自旋锁 首先通过一个例子来带着大家理解自旋锁&#xff0c;在生活中大家肯定都等过人比如你们一家人准备出去玩可是出发的时候妻子发现自己还没有化妆于是连忙赶回了家这个时候其他人就得在楼下等着&#xff0c;但是这个等又分为两种情况第一种是真的在楼下等其他的什么事都没…

Nginx:不同域名访问同一台机器的不同项目

Nginx很简单就可以解决同一台机器同时跑两个或者多个项目&#xff0c;而且都通过域名从80端口走。 以Windows环境下nginx服务为例&#xff0c;配置文件nginx.conf中&#xff0c;http中加上 include /setup/nginx-1.20.1/conf/conf.d/*.conf;删除server部分&#xff0c;完整如…

RT-Thread Studio开发 新手入门

文章目录 前言一、RT-Thread Studio 与 STM32CubeMX 下载安装二、新建工程三、点亮LED灯四、按键中断五、串口通信六、OLED显示 前言 软件开发环境&#xff1a;RT-Thread Studio、STM32CubeMX 硬件&#xff1a;STM32F407ZGT6 一、RT-Thread Studio 与 STM32CubeMX 下载安装 …

【图像处理:OpenCV-Python基础操作】

【图像处理&#xff1a;OpenCV-Python基础操作】 1 读取图像2 显示图像3 保存图像4 图像二值化、灰度图、彩色图&#xff0c;像素替换5 通道处理&#xff08;通道拆分、合并&#xff09;6 调整尺寸大小7 提取感兴趣区域、掩膜8 乘法、逻辑运算9 HSV色彩空间&#xff0c;获取特定…

哈希表之闭散列的实现

闭散列实现哈希表 在闭散列实现哈希表中&#xff0c;我们选择线性探测法来解决哈希冲突。在哈希表的简介部分&#xff0c;我们已经介绍过线性探测法啦&#xff01; 线性探测&#xff1a;从发生冲突的位置开始&#xff0c;依次向后探测&#xff0c;直到寻找到下一个空位置为止…

【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询(二)——前端el-pagination实现

系列文章 【Springboot】基于注解式开发Springboot-Vue3整合Mybatis-plus实现分页查询—后端实现 文章目录 系列文章系统版本实现功能实现思路后端传入的数据格式前端el-table封装axois接口引入Element-plus的el-pagination分页组件Axois 获取后台数据 系统版本 后端&#xf…

Day58_《MySQL索引与性能优化》

文章目录 一、SQL执行顺序二、索引简介1、关于索引2、索引的类型Btree 索引Btree 索引 三、Explain简介四、Explain 详解1、id2、select_type3、table4、type5、possible_keys6、key7、key_len8、ref9、rows10、Extra11、小案例 五、索引优化1、单表索引优化2、两表索引优化3、…