STM32速成笔记—IWDG

文章目录

  • 一、IWDG简介
  • 二、STM32的IWDG
    • 2.1 STM32的IWDG简介
    • 2.2 喂狗
    • 2.3 IWDG框图
  • 三、IWDG配置步骤
  • 四、IWDG配置程序
    • 4.1 IWDG初始化程序
    • 4.2 喂狗
  • 五、应用实例

一、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-6IWDG_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,就会产生系统复位。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud 之注册中心 Eureka 精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

【SpringCloud config分布式配置中心】—— 每天一点小知识

💧 S p r i n g C l o u d c o n f i g 分布式配置中心 \color{#FF1493}{SpringCloud config分布式配置中心} SpringCloudconfig分布式配置中心💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的…

软考A计划-系统集成项目管理工程师-项目范围管理(四)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

图像处理实战02-yolov5目标检测

yolov5 YOLOv5 是一种目标检测算法,它是 YOLO (You Only Look Once) 系列算法的最新版本。YOLOv5 采用了一种新的架构,它包括一个基于 CSPNet (Cross Stage Partial Network) 的主干网络以及一系列改进的技巧,如多尺度训练、数据增强、网络混…

chatgpt 用来取名字

Object ,array 相对 string,int 来说是什么类型, 分别用英文名称来定义他们的类型类别

自动化测试常见的三大问题及解决方案

各位小伙伴们,大家好,今天给大家带来的是关于自动化测试常见的三大问题及解决方案,希望给遇到这三大问题的你一些帮助 一,就是我们定位元素的时候,定位不到或有时定位得到,有时定位不到。 特别是喜欢复制…

Mysql数据库初体验

文章目录 MySQL数据库一.数据库的基本概念1.数据库的组成(1)数据(Data)(2)表(3)数据库(4)数据库管理系统(DBMS)(5)数据库系统 2.数据库系统发展史3.主流数据库介绍4.数据库分为关系型与非关系型(1)关系型:SQL(2)非关系…

node.js通过node-java库调用java接口(jar包)

node.js通过node-java库调用java接口 1、业务需要2、开发环境3、调用java包简单实例4、调用自定的jar包接口 1、业务需要 最近因项目需求,需要调用第三方java的打的jar包,但项目后端是用node.js写的,因此需要用node.js调用第三方jar,网上搜集…

云原生监控平台 Prometheus 的相关概念及部署

1 Prometheus简介 Prometheus 是一个开源的系统监控和报警系统,在 2012 年由 SoundCloud 公司创建,并于 2015 年正式发布。2016 年,Prometheus 正式加入 CNCF (Cloud Native Computing Foundation),成为继kubernetes之后第二个在C…

菜鸡shader:L5 fresnel、matcap和cubemap

文章目录 Fresnelshader forge实现UE4蓝图实现 Matcapshader forge实现UE4蓝图实现 CubeMapSD和PS制作所需的贴图shader forge实现unity代码实现UE4蓝图实现(未实现) Fresnel shader forge实现 个人理解是,使用观察方向和法向方向点乘,那就相当于我们的视…

聚合函数group byhaving

聚合函数&group by group by 字段名 规定依据哪个字段分组聚合 group by核心子句是可选项,使用该子句是为了依据相同字段值分组后进行聚合运算,常和聚合函数联用 不使用group by 子句时使用聚合函数,select子句中只能写聚合函数和包含聚…

(16)燃油流量和液位传感器

文章目录 前言 16.1 燃油流量传感器 16.1.1 连接到自动驾驶仪 16.2 燃油液位传感器 16.2.1 PWM油位传感器 16.2.2 模拟油位传感器 前言 在 4.0 及以后的固件版本中,ArduPilot 提供了使用燃油流量和液位传感器的能力,此外还有电池监控器。支持脉冲输…