STM32速成笔记—IWDG

2023-10-30

一、IWDG简介

独立看门狗(Independent Watchdog, IWDG),什么是看门狗?字面意思——看门的,有陌生人来,就会叫。实际在嵌入式领域里,看门狗也是这种作用,当软件程序发生故障或者程序跑飞时,看门狗会产生复位信号,复位系统。

二、STM32的IWDG

2.1 STM32的IWDG简介

STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精
度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。

  • 自由运行的12位递减计数器
  • 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
  • 看门狗被激活后,则在计数器计数至0x000时产生复位

一旦使能IWDG,就无法关闭。只有等到复位之后,才能将IWDG关闭。

2.2 喂狗

通过上面的简介可以知道,独立看门狗实际就是一个12位的递减计数器,当计数器的值递减到0的时候,就会产生复位。但是,如果我们在计数值递减到0之前,重新给计数器赋值,那么就不会再产生复位。这个操作叫做喂狗。

2.3 IWDG框图

IWDG框图

IWDG的框图很好理解,IWDG由一个由独立的RC振荡器提供时钟。经过一个8位的预分频器对时钟信号进行分频。12位递减计数器按照设置好的初始值和输入时钟递减。当递减计数器递减到0时,产生独立看门狗复位。

在产生复位之前,如果将重装载寄存器传递给递减计数器,那么就会重新开始递减,这叫做喂狗。

键寄存器也叫做关键字寄存器,往该寄存器写入不同的值,有不同的作用

  • 写入0x5555——表示允许访问IWDG_PR和IWDG_RLR寄存器
  • 写入0xAAAA——将重载寄存器的值传递到递减计数器,也就是喂狗
  • 写入0xCCCC——启动独立看门狗功能

中文参考手册中给出了一个时间表
IWDG的溢出时间表
时间的计算方法是,时间 = 重装载寄存器值 / (输入时钟频率 / 4 * 2^预分频系数)

为什么是4 * 2^预分频系数,可以看一下中文参考手册对于预分频寄存器的描述

预分频寄存器描述

三、IWDG配置步骤

  • 开启寄存器访问(允许访问IWDG_PR和IWDG_RLR寄存器)
  • 设置IWDG预分频系数和重装载值
  • 将重装载寄存器的值传递到递减计数器(喂狗)
  • 开启IWDG

四、IWDG配置程序

4.1 IWDG初始化程序

/*
 *==============================================================================
 *函数名称:IWDG_Init
 *函数功能:初始化IWDG
 *输入参数:pre:预分频系数(0~6);rlr:重装载值(0~0xFFF)
 *返回值:无
 *备  注:独立看门狗复位时间计算公式:t=(4*2^pre*rlr)/40(ms)
 *==============================================================================
 */
void IWDG_Init (u8 pre,u16 rlr)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);   // 取消寄存器写保护
	IWDG_SetPrescaler(pre);   // 设置预分频系数 0-6
	IWDG_SetReload(rlr);   // 设置重装载值
	IWDG_ReloadCounter();   // 重装载初值
	IWDG_Enable();   // 打开独立看门狗
}

4.2 喂狗

/*
 *==============================================================================
 *函数名称:IWDG_FeedDog
 *函数功能:喂狗
 *输入参数:无
 *返回值:无
 *备  注:无
 *==============================================================================
 */
void IWDG_FeedDog (void)
{
	IWDG_ReloadCounter();   // 重装载初值
}

五、应用实例

初始化IWDG,配置2s内不及时喂狗就会复位。通过按下按键WK UP喂狗。串口打印复位和喂狗信息。IWDG初始化程序如下

IWDG_Init(4,1250);   // 看门狗初始化,2s不及时喂狗,复位

main函数如下

u8 gKeyValue = 0;   // 记录按键键值变量

int main(void)
{
	Med_Mcu_Iint();   // 系统初始化
	printf("复位系统\r\n");
	
	while(1)
  {
		gKeyValue = Med_KeyScan();   // 获取按键键值
		
		// WK UP按下
		if (gKeyValue == 1)
		{
			IWDG_FeedDog();   // 喂狗
			printf ("喂狗\r\n");
		}
	}
}

效果如下
IWDG效果
按下WK UP喂狗,不会产生系统复位。一旦2s内,未按下WK UP,就会产生系统复位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32速成笔记—IWDG 的相关文章

  • 5.3 分布式 Git - 维护项目

    5 3 分布式 Git 维护项目 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 28 初稿 目录 文章目录 5 3 分布式 Git 维护项目 版本说明 目录 维护项目 1 在特性分支中工作 2 应用来自邮件的补丁 3 使
  • 字节跳动视频编解码面经

    引言 本文主要是记录一下面试字节跳动的经历 三四月份投了字节跳动的实习 图形图像岗位 然后hr打电话过来问了一下会不会opengl c shador 当时只会一点c 其他两个都不会 也就直接被拒了 七月初内推了字节跳动的提前批 因为内推没有
  • MybatisPlus中的的BaseMapper接口的认识

    接上一篇博客 还是在接手别人的代码的时候 看到了如下的代码 当时自己只是查询了以下wrapper构造器的用法 这里其实还有一个MybatisPlus中的BaseMapper接口的用法 上面这句代码的意思其实就相当于 SELECT COUNT

随机推荐

  • Spring boot+Vue3博客平台:文章发布与编辑功能的技术实现

    本文将详细介绍如何实现一个博客平台中的文章发布与编辑功能 包括前端的Vue组件设计和后端的Spring Boot接口实现 在阅读本文后 您将了解如何设计和实现高效 易用的文章发布与编辑功能 一 发布文章 设计思路 在设计文章发布功能时 我们
  • 【Python脚本进阶】1.2、python脚本基础知识(中)

    目录 一 异常处理 1 1 简介 1 2 示例 二 函数 2 1 简介 2 2 示例1 2 3 示例2 三 迭代 3 1 简介 3 2 示例1 3 3 示例2 3 4 示例3 3 5 示例4 我所用为python3 pycharm 一 异常
  • 利用FFmpeg进行视频文件进行分割

    利用FFMPEG命令进行文件分割 ffmpeg ss 00 00 00 i input mp4 c copy t 60 output mp4 ss 表示视频分割的起始时间 t 表示分割时长 同时也可以用 00 01 00表示 注意 ss 要
  • 爬虫之模拟登录

    方法一selenium from selenium import webdriver from selenium webdriver common keys import Keys import time driver webdriver
  • unity 纯C# android 端PC端 热更方案研究

    首先说明我们的使用场景 不涉及IOS只是android端 最好实现全部更新 项目只有热更空壳 其他逻辑代码场景全部热更 1 首先代码热更 DLL在转为btyes 2 场景热更 3 资源热更 4 加载后代码和资源关联关系 首先说下实现 全部是
  • 软件的静态测试和动态测试【软件测试分类】

    软件的静态测试和动态测试 软件测试一般分为静态测试和动态测试 1 静态测试 静态测试时指测试程序不在机器上运行 而是采用人工检测和计算机辅助静态分析的手段对程序进行检测 静态分析中进行人工测试的主要方法有桌前检查 Desk Checking
  • Latex多个子图进行组合

    20210413 0 引言 最近在用latex写论文 这种半路出家的 很多内容都要现场查 没办法 谁让平时用的少呢 本篇文章针对的内容是放置子图 也就是在文章中放置多个图片 这几个图片本质上同属于一个大图片 假设是3个 那就是3个子图 横向
  • websocket 发送内容长度设置(默认8192字节)

    https blog csdn net zhaotian19871204 article details 84801915
  • 2020年7月6日-7月26日(算每天1小时,合计215小时,剩9785小时)

    主要进行了二次开发 熟练度提高 新东西不多 大象无形也看过一些 但是没定计划磨洋工了 就算每天1小时 合计215小时 剩9785小时
  • Centos7下安装无头浏览器(headless Chrome) puppeteer 截图

    目录 第一步 添加repo源 第二步 安装chrome 第三步 安装驱动chromedriver puppeteer 是一个基于nodejs 调用chrome进行网页截图的库 chrome并不需要UI界面 一般访问网页 模拟点击操作等 在自
  • stable diffusion实践操作-大模型介绍-SDXL1大模型

    系列文章目录 大家移步下面链接中 里面详细介绍了stable diffusion的原理 操作等 本文只是下面系列文章的一个写作模板 stable diffusion实践操作 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档
  • 在Unity中使用OOP

    以Main Camera 为例 所有组件 Transform Camera Audio Listener Scirpts 在Unity中都是类 单击Play按钮时 这些组件都会成为内存中的对象 1 获取组件 使用GameObject类的Ge
  • Scala简介与安装

    目录 一 Scala简介 一 Scala概述 二 函数式编程 三 Scala特性 1 一切都是对象 2 一切都是函数 3 一切都是表达式 四 在线运行Scala 二 选择Scala版本 三 Windows上安装Scala 一 到Scala官
  • /var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行的问题解决

    问题 解决 root localhost rm f var run yum pid
  • openGL阴影实现(软阴影)

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 现实世界中的柔和阴影 二 生成柔和阴影 百分比邻近滤波 PCF 1 引入库 代码 运行效果 源码下载 前言 目前我们所展示的阴影生成方法都仅限于生成硬阴影 即带锐边的阴
  • R语言绘制箱线图并添加相关显著性

    箱线图 又称盒须图 通过绘制连续型变量的五数总括 即最小值 下四分位数 第25百分位数 中位数 第50百分位数 上四分位数 第75百分位数 以及最大值 描述了连续型变量 的分布 它主要用于反映原始数据分布的特征 还可以进行多组数据分布特征的
  • 网络爬虫CSS选择器详细讲解

    网络爬虫CSS选择器详细讲解 前言 使用步骤 1 解析的HTML代码 2 逐层选择节点 3 获取文本 string和get text 4 获取节点的属性值 5 选择单个和多个节点 6 通过class和id选择节点 class id 7 选择
  • PLY 模型文件简析

    PLY 模型文件简析 参考链接 wiki需要FFFQQQ TIPS 主要是一些英文的简析 但是一句话 网上讲的不清楚 特此说明property list uchar int vertex indices 应该是面的顶点数量使用 uchar
  • 苹果 / Apple iCloud 教育版 200GB 云盘账号自助注册教程

    因为教育机构的管理式 Apple ID 可以单点登录 SSO 登录 因此自助注册苹果 Apple iCloud 教育版 200GB 云盘账号就可以顺利进行了 自助注册苹果 Apple iCloud 教育版 200GB 云盘账号分为两步 自助
  • STM32速成笔记—IWDG

    文章目录 一 IWDG简介 二 STM32的IWDG 2 1 STM32的IWDG简介 2 2 喂狗 2 3 IWDG框图 三 IWDG配置步骤 四 IWDG配置程序 4 1 IWDG初始化程序 4 2 喂狗 五 应用实例 一 IWDG简介