独立看门狗窗口开门狗

news2024/11/25 9:44:23

独立看门狗

接线图:按键用于阻塞喂狗。独立看门狗&窗口开门狗接线一样。
在这里插入图片描述

在这里插入图片描述

第一步,是开启时钟了,只有这个LSI时钟开启了独立看门狗才能运行,所以初始化独立看门狗之前,LSI必须得开启,但是这个开启LSI的代码并不需要我们来写,我们看一下手册6.2.9。

在这里插入图片描述
下一步我们就是写入预分频器和重装寄存器了,当然在写入这两个寄存器之前,不要忘了这里的写保护,首先写入这个键值0X5555解除写保护,然后再写入预分频和重装值。

第二步,就是解除写保护。

在这里插入图片描述
第三步,是写入预分频和重装值,预分频和重装值具体写入多少,我们可以通过这里的超时时间公式来计算,最后当这些配置工作做完之后,可以执行指令(写入0xCCCC)来启动独立看门狗了,
在这里插入图片描述

第四步,在主循环里,我们可以不断执行指令(0xAAAA)来进行喂狗,这是独立看门狗的配置流程。

stm32f10x_iwdg.h常用函数:

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); // 写使能控制 写入0x5555/0x0000
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);      // 写预分频器PR寄存器
void IWDG_SetReload(uint16_t Reload);                // 写重装值RLR寄存器
void IWDG_ReloadCounter(void);                       // 重新装载寄存器0xAAAA 喂狗
void IWDG_Enable(void);                              // 启用独立看门狗 在键寄存器写入0xCCCC
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);   // 查看看门狗标志位


//rcc.h里查看标志位函数  可以查看一种是HSI、HSE时钟的Ready,判断时钟是不是准备好了,另一种上电/掉电复位、软件复位、独立看门狗(Independent Watchdog reset)、窗口看门狗复位(Window Watchdog reset)、低功耗复位。
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//查看标志位函数
void RCC_ClearFlag(void); //清除

在这里插入图片描述

配置分频器和重装值:设置之前,需要设定想要的设定时间,例如1000ms,要设置1000ms,但只能设置/16分频之后,因为在最短时间和最长时间都包含1000ms。但又要选择预分频系数小,可以最大化利用计数器,减小误差。
超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)
1000ms=1/40KHZ× 16× (RL + 1) 所以,RL=2499

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"

int main(void)
{
	/*模块初始化*/
	OLED_Init();						//OLED初始化
	Key_Init();							//按键初始化
	
	/*显示静态字符串*/
	OLED_ShowString(1, 1, "IWDG TEST");
	
	/*判断复位信号来源*/
	if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == SET)	//如果是独立看门狗复位  
	{
		OLED_ShowString(2, 1, "IWDGRST");			//OLED闪烁IWDGRST字符串
		Delay_ms(500);
		OLED_ShowString(2, 1, "       ");           //显示空格,把字符串清除
		Delay_ms(100);
		
		RCC_ClearFlag();							//清除标志位 必须要清除标志位,因为IWDGRST标志位,及时按下复位键,也不会自动清0
	}
	else											//否则,即为其他复位
	{
		OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串
		Delay_ms(500);
		OLED_ShowString(3, 1, "   ");
		Delay_ms(100);
	}
	
	/*IWDG初始化*/
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	//独立看门狗写使能,解除写保护
	IWDG_SetPrescaler(IWDG_Prescaler_16);			//设置预分频为16
	IWDG_SetReload(2499);							//设置重装值为2499,独立看门狗的超时时间为1000ms
	IWDG_ReloadCounter();							//重装计数器,喂狗
	IWDG_Enable();									//独立看门狗使能
	//喂狗或使能的时候,会在键寄存器写入5555之外的值,这时就顺便给寄存器写保护了,就不用再手动执行写保护了
	
	while (1)
	{
		Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死,按住按键不放,主循环就会阻塞,不能执行后面喂狗,独立看门狗就会复位。
		
		IWDG_ReloadCounter();						//重装计数器,喂狗
		
		OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串
		Delay_ms(200);								//喂狗间隔为200+600=800ms
		OLED_ShowString(4, 1, "    ");
		Delay_ms(600);
	}
}

程序现象:
正常情况下,OLED第4行,不断显示喂狗,程序不会复位
在这里插入图片描述

然后按住PB1的按键不放,程序阻塞,就会引起独立看门狗的复位。
在这里插入图片描述

窗口开门狗

在这里插入图片描述
在这里插入图片描述
这里因为窗户看门狗的时钟来源是PCLK1。

第一步,需要开启窗户看门狗APB1的时钟,这个第一步需要我们自己来执行,不会像独立看门狗自动开启。
第二步,就是配置各个寄存器了,比如预分频和窗口值。窗口看门狗没有写保护,可以直接写这些寄存器了。
第三步,写入控制性器CR,控制寄存器包含:看门狗使能位、计数器溢出标志位和计数器有效位,这些需要一起设置。

之后在运行过程中,我们不断向计数器写入想要的重装值,这样就可以进行喂狗了,这是窗口看门狗的操作流程。

窗口开门狗常用函数:

void WWDG_DeInit(void);                         //恢复缺省配置

//初始化配置用这两个函数
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//写入预分频器
void WWDG_SetWindowValue(uint8_t WindowValue);	//写入窗口值


void WWDG_EnableIT(void);						//使能中断
void WWDG_SetCounter(uint8_t Counter);			//写入计数器(喂狗)
void WWDG_Enable(uint8_t Counter);				//使能启动窗口看门狗
FlagStatus WWDG_GetFlagStatus(void);            //获取标志位
void WWDG_ClearFlag(void);                      //清除标志位

函数WWDG_Enable()为何要传递一个参数?为了避免刚使能,就复位,可以使能的同时顺便喂一下狗
在这里插入图片描述
在这里插入图片描述
设定的超时时间是:50ms,窗口时间是:30ms。分频系数选择:3
TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)
50ms=1/36×4096×2^3× (T[5:0] + 1)=54

TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
30ms=1/36×4096×2^3× (54 - W[5:0])=21

这个54,是T[5:0] 的值,还有寄存器T6位设置为1,所以在或上0x40,(54 | 0x40),在程序里加入。
还有个WDGA使能位,写0没有任何作用,可以直接写入计数器值
在这里插入图片描述
main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Key.h"

int main(void)
{
	/*模块初始化*/
	OLED_Init();						//OLED初始化
	Key_Init();							//按键初始化
	
	/*显示静态字符串*/
	OLED_ShowString(1, 1, "WWDG TEST");
	
	/*判断复位信号来源*/
	if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == SET)	//如果是窗口看门狗复位
	{
		OLED_ShowString(2, 1, "WWDGRST");			//OLED闪烁WWDGRST字符串
		Delay_ms(500);
		OLED_ShowString(2, 1, "       ");
		Delay_ms(100);
		
		RCC_ClearFlag();							//清除标志位
	}
	else											//否则,即为其他复位
	{
		OLED_ShowString(3, 1, "RST");				//OLED闪烁RST字符串
		Delay_ms(500);
		OLED_ShowString(3, 1, "   ");
		Delay_ms(100);
	}
	
	/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);	//开启WWDG的时钟
	
	/*WWDG初始化*/
	WWDG_SetPrescaler(WWDG_Prescaler_8);			//设置预分频为8
	WWDG_SetWindowValue(0x40 | 21);					//设置窗口值,窗口时间为30ms  ,T6位也要设置成1,所以或上0x40
	WWDG_Enable(0x40 | 54);							//使能并第一次喂狗,超时时间为50ms,T6位也要设置成1,所以或上0x40
	
	while (1)
	{
		Key_GetNum();								//调用阻塞式的按键扫描函数,模拟主循环卡死
		
		OLED_ShowString(4, 1, "FEED");				//OLED闪烁FEED字符串
		Delay_ms(20);								//喂狗间隔为20+20=40ms
		OLED_ShowString(4, 1, "    ");
		Delay_ms(20);
		
		WWDG_SetCounter(0x40 | 54);					//重装计数器,喂狗
	}
}

程序现象:
第四行,很快闪烁FEED,表示喂狗。
在这里插入图片描述

在这里插入图片描述

超时喂狗,会导致复位

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

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

相关文章

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败 解决方法: 首先%oracle_home%/network/admin下的sqlnet.ora文件,把SQLNET.AUTHENTICATION_SERVICES (NTS)加个 # 注释掉就好了

稳态与敏态业务阶段

稳态业务就是比如你登录学校的图书馆教务处这些业务系统 用户数量和数据基本上不会发生太大的变化 业务系统的更新也不是很频繁,比较方便资源的采购 敏态业务就是比如我开发一个应用上线了,我不知道有多少用户和数量,无法预估 这就没办法…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口:计算机专业,依旧闪耀吗? 随着2024年高考的尘埃落定,数百万青春洋溢的脸庞再次凝视着未来的迷雾,试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来,计算机专业…

自动驾驶辅助功能测试用例表格(续2)

自动驾驶辅助功能测试用例表格(续) 用例编号测试类型测试项目测试描述车辆准备车辆状态车辆场景车辆执行可变因素具体信号状态通过标准预期标准通过/失败TJA-001功能测试交通拥堵辅助 (TJA)测试TJA系统在交通拥堵情况下的自动跟车和保持车道功能TJA系统已…

高性能并行计算华为云实验四:快排算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建快排算法源码 3.2 makefile的创建与编译 3.3 主机文件配置与运行监测 四、实验结果与分析 4.1 结果一及分析 4.2 结果二及分析 五、实验思考与总结 5.1 实验思考 5.2 实验总结 END~ 一、实验目的…

吴恩达机器学习 第三课 week2 推荐算法(上)

目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 (1)了解推荐算法 (2)掌握协同过滤推荐算法(Collabo…

正则表达式之三剑客grep

正则表达式匹配的是文本内容,linux的文本三剑客 都是针对文本内容 grep 过滤文本内容 sed 针对文本内容进行增删改查 awk 按行取列 文本三剑客都是按行进行匹配。 grep grep 的作用就是使用正则表达式来匹配文本内容 选项: -m …

vivado SLR

描述 超级逻辑区(SLR)是包含在堆叠硅中的单个FPGA芯片 互连(SSI)设备。堆叠式硅互连(SSI)技术使用无源硅 具有微凸块和硅通孔(TSV)的内插器,用于组合多个FPGA管芯 切片&a…

最长考拉兹序列

题目: 考虑如下定义在正整数集上的迭代规则: n n/2 (若n为偶数) n 3n1 (若n为奇数) 从13开始,可以迭代生成如下的序列: 13 40 20 10 5 16 8 4 2 1 可以看出这个序列(从13…

实时语音翻译软件哪个好?多语言实时沟通无负担

众所周知,英语是国际交流的共同语言。无论是跨国商务洽谈还是学术研讨,英语的流畅使用至关重要。 然而,语言的障碍依然存在,这时一款高效的英语语音翻译软件就显得尤为关键。它们能够即时转换语言,让我们的对话无国界…

跨境电商系列02:跨境电商的本质,是一场现代文明的“侵x入”吗

作者|夏虫(题图:中国龙) 公号,数据虫巢(ID: blogchong) “ 不知道有没有人想过一个问题,海出电商市场是增量的没问题,那为何是跨境电商的模式呢?所谓跨境电商,一定是存在商品流动&a…

pytest测试框架pytest-rerunfailures插件重试失败用例

Pytest提供了丰富的插件来扩展其功能,介绍下插件pytest-rerunfailures ,用于在测试用例失败时自动重新运行这些测试用例。 pytest-rerunfailures官方显示的python和pytest版本限制: Python 3.8pytest 7.2 或更新版本 此插件可以通过以下可…

《计算机英语》Unit2 Operating System and Computer Architecture 操作系统和计算机构造

SectionA Operating System操作系统 不同操作系统 批处理操作系统(Batch Processing Operating System) 分时操作系统(Time Sharing Operating System) 实时操作系统(Real Time Operating System) 个人操作系统(Personal Operating System) 网络操作系统(NOS, Network Operati…

【Vue3组件】分享一下自己写的简约风格评论区组件

代码比较简单,方便大家二次开发,旨在快速提供基础的样式模板,自行迭代定制 预览 简介 通用评论组件 组件功能 此组件旨在创建一个具备嵌套回复能力的通用评论区域,适用于构建动态、互动性强的用户讨论场景。 接收数据结构 组件通…

运营管理和服务支撑阶段

我前面的所有设备都部署好了,现在就需要运营管理和服务支撑 遇到问题了迅速解决,避免风险扩大 我们也可以给客户提供上面的服务,提高客户的预警能力,安全风险处理能力 我们不仅提供设备,还提供服务 我们公司成立了安…

如何选择服务器?快解析能搭建私人服务器吗?

随着网络的发展,搭建私人服务器逐渐成为网络达人们的热门选择,比如建立私人性质的博客、论坛、FTP、个人网站、服务器集群等。通过源搭建私人服务器,就可以将很多资源分享到网络上进行信息共享。随之而来的是服务器市场不断扩大,在…

马尔可夫聚类算法

马尔可夫聚类算法(Markov Clustering Algorithm,MCL)是一种用于图聚类的算法,广泛应用于生物信息学、社交网络分析、推荐系统等领域。 其核心思想是模拟随机游走过程,通过迭代地扩散和收缩图上的概率分布来识别图中的…

Java基础的重点知识-01-基础

文章目录 开发前言Java语言开发环境入门程序说明常量变量和数据类型数据类型转换运算符方法解析 开发前言 常用DOS命令 Java语言的初学者,学习一些DOS命令,会非常有帮助。DOS是一个早期的操作系统,现在已经被Windows系统取代,对于…

【mysql】建库

通过命令建库: CREATE DATABASE database_name; 如果是用Workbench:

React+TS前台项目实战(十六)-- 全局常用组件Pagination封装

文章目录 前言Pagination组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 [PC端&手机端] 总结 前言 在上篇文章中,我们封装了表格组件Table,本文则继续封装配套使用的分页器组件。想看Table表格组件的,可自行查看全局常用组件Tab…