独立看门狗(IWDG)概述

STM32F10xxx系列内置两个看门狗(独立看门狗和窗口看门狗),提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。

独立看门狗(IWDG)由专用的低速内部时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。

窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

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

WWDG适合要求看门狗在精确计时窗口起作用的应用程序。

IWDG主要性能

● 自由运行的递减计数器

● 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)

● 看门狗被激活后,则在计数器计数至0x000时产生复位

IWDG功能描述

独立看门狗模块的功能框图

在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。

无论何时,只要在键寄存器(IWDG_KR)中写入0xAAAA, 重装载寄存器(IWDG_RLR)中的值就会被重新加载到12位递减计数器,从而避免产生看门狗复位 。

硬件看门狗

如果用户在选择字节中启用了“硬件看门狗”功能,在系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。

寄存器访问保护

预分频寄存器(IWDG_PR)和重装载寄存器(IWDG_RLR)具有写保护功能。要修改这两个寄存器的必须先向IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。

状态寄存器指示预分频值和递减计数器是否正在被更新。

看门狗超时时间

IWDG寄存器描述

 

IWDG寄存器映像

IWDG固件库函数

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

1)取消寄存器写保护(向 IWDG_KR 写入 0X5555)

通过这步,我们取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器,设置 IWDG_PR 和 IWDG_RLR 的值。这在库函数中的实现函数是:

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

这个函数的功能开启/取消写保护,即使能/失能写权限。

 2)设置独立看门狗的预分频系数和重装载值

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

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

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

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

设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间(也就是看门狗溢出时间),该时间的计算方式为:

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

其中 Tout 为看门狗溢出时间(单位为 ms);prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值);

比如我们设定 prer 值为 4,rlr 值为 625,那么就可以得到 Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。

3)重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)

库函数里面重载计数值的函数是:

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

通过这句,将使 STM32 重新加载 IWDG_RLR 的值到看门狗计数器里面。即实现独立看门狗的喂狗操作。

4) 启动看门狗(向IWDG_KR 写入 0XCCCC)

库函数里面启动独立看门狗的函数是:

IWDG_Enable(); //使能 IWDG

通过这句,来启动 STM32 的看门狗。

注意 IWDG 在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开 IWDG,否则问题依旧,如果不用 IWDG 的话,就不要去打开它,免得麻烦。

通过上面 4 个步骤,我们就可以启动 STM32 的看门狗了,使能了看门狗,在程序里面就 必须间隔一定时间喂狗,否则将导致程序复位。

IWDG(独立看门狗)实验

硬件设计

本实验用到的硬件资源有:

1) 指示灯 DS0

2) WK_UP 按键

3) 独立看门狗

需要 2 个 IO 口,一个用来输入喂狗信号,另外一个用来指示程序是否重启。喂狗我们采用板上的 WK_UP 键来操作,而程序重启,则是通过 DS0 来指示的。

软件设计

在工程文件目录下面新建两个文件夹分别为:wdg.c和wdg.h。并在把源文件添加到工程,和添加头文件的路径。

wdg.c 里面的代码如下:

#include "wdg.h"
//初始化独立看门狗
//prer:分频数:0~7(只有低 3 位有效!)
//分频因子=4*2^prer.但最大值只能是 256!
//rlr:重装载寄存器值:低 11 位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //①使能对寄存器 I 写操作IWDG_SetPrescaler(prer); //②设置 IWDG 预分频值:设置 IWDG 预分频值IWDG_SetReload(rlr); //②设置 IWDG 重装载值IWDG_ReloadCounter(); //③按照 IWDG 重装载寄存器的值重装载 IWDG 计数器IWDG_Enable(); //④使能 IWDG
}
//喂独立看门狗
void IWDG_Feed(void)
{ IWDG_ReloadCounter();//reload
}

该代码一共有 2 个函数,void IWDG_Init(u8 prer,u16 rlr)是独立看门狗初始化函数,就是按照上面介绍的步骤 1~4 来初始化独立看门狗的。该函数有 2 个参数,分别用来设置与预分频数与重装寄存器的值的。

void IWDG_Feed(void)函数,该函数用来喂狗,因为 STM32 的喂狗只需要向键值寄存器写入 0XAAAA 即可,也就是调用 IWDG_ReloadCounter()函数,所以,我们这个函数也是简单的很。

wdg.h 里面的代码如下

#ifndef __WDG_H
#define __WDG_H
#include "sys.h"void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);#endif

main.c中的代码:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "wdg.h"int main(void){       delay_init();            //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);  //串口初始化为115200LED_Init();           //初始化与LED连接的硬件接口KEY_Init();          //按键初始化    delay_ms(500);      //让人看得到灭IWDG_Init(4,625);    //与分频数为64,重载值为625,溢出时间为1s    LED0=0;              //点亮LED0while(1){if(KEY_Scan(0)==WKUP_PRES){IWDG_Feed();//如果WK_UP按下,则喂狗}delay_ms(10);};
}

按键输入和看门狗,在看门狗开启后马上点亮 LED0(DS0),并进入死循环等待按键的输入,一旦 WK_UP 有按键,则喂狗,否则等待 IWDG 复位的到来。

实验现象

上电后DS0 不停的闪烁,证明程序在不停的复位,否则只会 DS0 常亮。如果不停的按 WK_UP 按键,可以看到 DS0 就常亮了,不会再闪烁,则说明程序在不断的复位,喂狗成功。

【STM32学习笔记】(14)——独立看门狗(IWDG)详解相关推荐

  1. IWDG 独立看门狗 知识详解

    目录 1. IWDG简介 2. IWDG功能框图解析 3. IWDG启动方法 (1)软件启动 (2)硬件启动(选项字节) 4. IWDG超时溢出时间计算 1. IWDG简介 独立看门狗(Indepen ...

  2. WWDG 窗口看门狗 知识详解

    目录 1. WWDG简介 2. WWDG功能框图解析 3. 启动方式 (1)软件启动 (2)硬件启动 4. WWDG超时图解及超时时间计算 1. WWDG简介 独立看门狗(Independent Wa ...

  3. STM32F1笔记(六)独立看门狗IWDG

    STM32F1内置了两个看门狗,独立看门狗IWDG和窗口看门狗WWDG,可以用来检测和解决由软件错误引起的故障. IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 ...

  4. STM32—独立看门狗(IWDG)

    STM32-独立看门狗(IWDG) 独立看门狗(IWDG) STM32-独立看门狗(IWDG) 独立看门狗(IWDG) IWDG 简介 IWDG 功能框图剖析 独立看门狗时钟 计数器 重装载寄存器 键 ...

  5. stm32专题三十四:独立看门狗 IWDG

    独立看门狗简介 IWDG结构框图 (1)独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立. LSI 的频率一般在 30~60KHZ 之间, ...

  6. STM32F103五分钟入门系列(十三)独立看门狗IWDG

    参考:STM32F103五分钟入门系列(十三)独立看门狗IWDG 作者:自信且爱笑' 发布时间:2021-07-31 19:50:28 网址:https://blog.csdn.net/Curnane ...

  7. STM32开发笔记77: 内部看门狗长延时的产生

    单片机型号:STM32L053R8T6 开发笔记STM32开发笔记45:看门狗驱动程序的移植介绍了看门狗驱动程序的基本设计方法.今天项目中看门狗的延时时间达到10秒,则实际运行效果只有3秒. 以下是看 ...

  8. 独立看门狗IWDG详细解析

    目录 独立看门狗IWDG详细解析 为什么要有看门狗? 看门狗的定时原理 寄存器功能简介 看门狗定时器计数原理 看门狗相关寄存器 KR寄存器 PR寄存器 RLR寄存器 SR寄存器 看门狗相关基础知识 什 ...

  9. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  10. 从零实现 独立看门狗IWDG STM32的待机与唤醒,在待机过程中如何喂狗

    欢迎大家留言交流~ 前言: 最近在学习原子的阿波罗,进行到待机实验,实验目的是摁下KEY_UP的时候就可以让MCU从待机模式唤醒了.而KEY1在按下的时候进入休眠.(验证过程比较繁琐,只看结论的小伙伴 ...

最新文章

  1. 使用Apache Archiva搭建Maven Repository Server
  2. pepflashplayer32_25_0_0_127.dll: 0x59952C6D is not a valid instance ID.
  3. FFMPEG系列课程(一)打开视频解码器
  4. 主动防御型杀毒软件的技术探讨
  5. lombok 自动使用_Lombok,自动值和不可变项
  6. [渝粤教育] 温州医科大学 医用高等数学 参考 资料
  7. Enze Second day
  8. SpringMVC原理及非注解配置详解
  9. java特殊字符转义字符_Java正则表达式处理特殊字符转义的方法
  10. c语言简易成绩管理系统c语言,C语言写的简易成绩管理系统
  11. mybatis执行的核心步骤
  12. (三)java版spring cloud+spring boot 社交电子商务平台 - Spring Cloud集成项目简介
  13. Mysql指定编码导入导出数据
  14. Eclipse 调试技巧
  15. 后台扫描工具 - 御剑(珍藏版)附下载
  16. SQLite数据库的CRUD操作
  17. 如何更改itunes备份位置_Win10系统怎样设置itunes备份位置
  18. 量子密码(二)——经典的希特勒密码、紫色密码、乘数密码以及量子密码、量子纠缠初探
  19. 标准差和标准误差的区别
  20. Lotus notes问题与处理

热门文章

  1. 【JavaScript】Ajax
  2. 国内三大手机运营商号段
  3. Python实战采集全球疫情数据
  4. 移动直播app软件直播平台怎么创建
  5. SpringBoot与安全SpringSecurity
  6. SCU 4437 Carries 想法题
  7. Linux 与 Python编程2021 顺序与选择结构 educoder实训
  8. 计算机应用基础华工平时作业,计算机应用基础华工平时作业答案
  9. MSP430单片机在3V与5V混合系统中的逻辑接口技术
  10. newifimini出厂固件_newifi mini旗舰版固件