STM32F407的看门狗

文章目录

  • 看门狗时钟
    • 两种看门狗
    • IWDG结构图
    • 作用
  • 寄存器
    • IWDG_KR键值寄存器
    • IWDG_PR预分频寄存器
      • 2-0 PR预分频器系数
    • IWDG_RLR重装载寄存器
    • IWDG_SR状态寄存器
      • 1RVU 重载值更新
      • 0 PVU 预分频值更新
      • 注意
    • 写保护
    • 超时时间
    • 使用步骤
      • 取消寄存器 写保护
      • 设置预分频系数和重装载值
      • 看门狗溢出时间(单位为 ms)
      • 喂狗
      • 启动看门狗
    • 程序
      • 主程序
      • 函数

看门狗时钟

两种看门狗

  • 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。
    独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。
  • 窗口看门狗由从APB1时钟分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。
    窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。

IWDG结构图

在这里插入图片描述

作用

IWDG Independent watch door dog独立看门狗

  • STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。
  • 单片机系统在的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位外界信号)
  • 结果:在程序跑飞之后,系统复位,程序重新运行。

寄存器

IWDG_KR键值寄存器

在这里插入图片描述
开启IWDG

  • 键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗
    • 此时计数器开始从其复位值 0xFFF 递减计数。
    • 当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
    • 只要键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位 。

IWDG_PR预分频寄存器

F407中文参考手册18.4.2
在这里插入图片描述
该寄存器用来设置看门狗时钟的分频系数。

2-0 PR预分频器系数

在这里插入图片描述

IWDG_RLR重装载寄存器

该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32位寄存器,但是只有低 12 位是有效的。

IWDG_SR状态寄存器

在这里插入图片描述

1RVU 重载值更新

在这里插入图片描述

0 PVU 预分频值更新

在这里插入图片描述

注意

在这里插入图片描述

写保护

F407中文参考手册18.3.2
在这里插入图片描述

IWDG 在一旦启用,就不能再被关闭!想要关闭,只能重启

独立看门狗相关的库函数和定义分布在文件 stm32f10x_iwdg.h 和stm32f10x_iwdg.c 中

超时时间

在这里插入图片描述
溢出时间计算:
Tout=((4×2^prer) ×rlr) /32 (M4)

使用步骤

取消寄存器 写保护

(向 IWDG_KR 写入 0X5555 )

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

设置预分频系数和重装载值

设置看门狗的分频系数的函数是

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值

设置看门狗的重装载值的函数是:

void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

看门狗溢出时间(单位为 ms)

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

  • prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7
  • rlr 为看门狗的重装载值(IWDG_RLR 的值)
  • 40/(4*2^prer)是频率,反之即为时间,与计数值相乘为总时间。若总时间为1s,可以设prer是4,则(64/32)*500ms合适
  • 这里需要提醒大家的是,看门狗的时钟不是准确的 40Khz,所以在喂狗的时候,最好不要太晚了

喂狗

(向IWDG_KR 写入 0XAAAA )
库函数里面重载计数值的函数是:

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

启动看门狗

(向 向 IWDG_KR 写入 0XCCCC)
库函数里面启动独立看门狗的函数是:

IWDG_Enable(); //使能 IWDG

程序

主程序

int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED端口
	KEY_Init();		  	//初始化按键
  delay_ms(100);    //延时100ms 
	IWDG_Init(4,500); //与分频数为64,重载值为500,溢出时间为1s	
	LED0=0;					  //先点亮红灯
	while(1)
	{
		if(KEY_Scan(0)==WKUP_PRES)//如果WK_UP按下,则喂狗
		{
			IWDG_Feed();//喂狗
		}
		delay_ms(10);
	};

}

函数

//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//rlr:自动重装载值,0~0XFFF.
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对IWDG->PR IWDG->RLR的写
	
	IWDG_SetPrescaler(prer); //设置IWDG分频系数

	IWDG_SetReload(rlr);   //设置IWDG装载值

	IWDG_ReloadCounter(); //reload
	
	IWDG_Enable();       //使能看门狗
}

//喂独立看门狗
void IWDG_Feed(void)
{
	IWDG_ReloadCounter();//reload
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器搭建sql 服务

阿里云搭建mysql服务 环境准备 系统镜像 ubuntu 如果买点的实例不是ubuntu 系统镜像,需要停止服务之后,更改镜像 更新 apt-get : 更新apt-get: sudo apt-get update 如果没有出现:apt-get 找不到此命令的错误,可能是…

【教3妹学编程-算法题】2923. 找到冠军 I

3妹:2哥2哥,你看到新闻了吗?襄阳健桥医院院长 公然“贩卖出生证明”, 真是太胆大包天了吧。 2哥 : 我也看到新闻了,7人被采取刑事强制措施。 就应该好好查查他们, 一查到底! 3妹:真的…

箱线图(boxplot)

箱线图 boxplot 简述原理绘制方法python - matplotlib加载功能模块加载数据绘制boxplot python - seaborn加载功能模块加载数据绘制boxplot R - ggplot加载功能模块加载数据绘制boxplot 简述 因图形形状如箱子而得名。箱线图常用于展示一组连续型数据的分散情况。学术界普遍认…

SQL SERVER Inregration Services-OLE DB、Oracle和ODBC操作

OLE DB链接器 OLE DB插件下载:https://learn.microsoft.com/zh-cn/sql/connect/oledb/download-oledb-driver-for-sql-server?viewsql-server-ver16 配置OLE DB Connection Manager 在点击“新建”时,会弹出警告信息“不支持指定的提供程序&#xff0…

文件夹批量改名技巧:简单步骤,实现文件夹随机重命名

在日常生活和工作中,经常需要处理大量的文件夹,需要对其进行有效的管理。在这些情况下,文件夹的命名就变得非常重要。一个好的命名策略可以快速找到所需的文件夹,也可以帮助更好地组织文件。然而,手动为每个文件夹重命…

研究方法——案例研究设计与方法

作者:罗伯特K.殷 (一)计划:如何把握何处、何时用案例研究方法 1.问题: 按照作者的观点,案例研究1984年之后才逐渐得到重视,可是在数据信息有效收集的时代,几乎所有的经典都是以案例…

电路中模拟地和数字地的分割方法

电路中只要是地,最终都要接到一起,然后入大地。如果不接在一起就是“浮地”,存在压差,容易积累电荷,造成静电。 地是参考0电位,所有电压都是参考地得出的,地的标准一致,故各种地应短…

计蒜客详解合集(3)期

目录 T1236——分苹果 T1113——整理药名 T1153——整数奇偶排列 T1249——漂亮的字符串 T1168——统计素数个数 T1160——甲流病人筛选 T1236——分苹果 分享一道特别简单的题。 蒜头君要把一堆苹果分给 个小朋友,要使每个人都能拿到苹果,而目每…

搞怪python代码

微信消息重发代码: from pynput.keyboard import Key,Controller import time keyboard Controller()a input("请输入你需要循环输出的内容:") b eval(input(请输入你想要循环的次数:)) print("数据已接收!请将…

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

目录 1解题思路&#xff1a; 2代码如下&#xff1a; 3运行结果&#xff1a; 4总结&#xff1a; 5介绍&#xff1a; 1解题思路&#xff1a; 利用循环&#xff08;穷举法&#xff09;来 对 所 需要的数 进行确定 2代码如下&#xff1a; #include <stdio.h>int main() …

【Python大数据笔记_day06_Hive】

hive内外表操作 建表语法 create [external] table [if not exists] 表名(字段名 字段类型 , 字段名 字段类型 , ... ) [partitioned by (分区字段名 分区字段类型)] # 分区表固定格式 [clustered by (分桶字段名) into 桶个数 buckets] # 分桶表固定格式 注意: 可以排序[so…

Java中的多态究竟是什么?

目录 一.概念二.使用条件三.重写1.概念2.使用条件3.与重载对比4.举例5.为什么需要重写1.重写规则 2.静态绑定--重载3.动态绑定--重写 四.向上转型第一种传参方式&#xff1a;直接赋值第二种传参方式&#xff1a;通过传参优缺点 五.向下转型举例缺点 六.多态的优缺点优点缺点 一…

ros1 基础学习08- 实现Server端自定义四 Topic模式控制海龟运动

一、服务模型 Server端本身是进行模拟海龟运动的命令端&#xff0c;它的实现是通过给海龟发送速度&#xff08;Twist&#xff09;的指令&#xff0c;来控制海龟运动&#xff08;本身通过Topic实现&#xff09;。 Client端相当于海龟运动的开关&#xff0c;其发布Request来控制…

Leetcode2833. 距离原点最远的点

Every day a Leetcode 题目来源&#xff1a;2833. 距离原点最远的点 解法1&#xff1a;贪心 要使得到达的距离原点最远的点&#xff0c;就看 left 和 right 谁大&#xff0c;将 left 和 right 作为矢量相加&#xff0c;再往同方向加上 underline。 答案即为 abs(left - rig…

vue-入门介绍

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容,初识vue入门到项目实战详解 目录 一.Vue介绍 二.初识Vue 工具安装 创建项目 目录结构介绍 项…

Adobe premiere裁剪视频尺寸并转为GIF格式

第一步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“DNxHR_2K” 第二步&#xff1a;导出设置

SpringBoot集成easyexcel实现动态模板导出

添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-o…

AlGaN/GaN HFET 五参数模型

标题&#xff1a;A Five-Parameter Model of the AlGaN/GaN HFET 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;15年&#xff09; 摘要—我们引入了AlGaN/GaN异质结场效应晶体管&#xff08;HFET&#xff09;漏极电流Id&#xff08;Vgs&#xff0c;Vds…

【Linux】Linux 中关于 MySQL 的相关操作

Linux 中关于 MySQL 的相关操作 Linux 系统与 MySQL 数据库是目前互联网开发中最为流行的组合之一。Linux 作为开源的操作系统&#xff0c;具有运行效率高、安全性好等优点&#xff1b;而 MySQL 作为开源的数据库&#xff0c;具有运行速度快、可靠性高等特点。 &#xff08;1&…

Spring Boot (三)

1、热部署 热部署可以替我们节省大把花在重启项目本身上的时间。热部署原理上&#xff0c;一个springboot项目在运行时实际上是分两个过程进行的&#xff0c;根据加载的东西不同&#xff0c;划分成base类加载器与restart类加载器。 base类加载器&#xff1a;用来加载jar包中的类…