STM32速成笔记(十)—IWDG

简介: 本文详细介绍了什么是IWDG,STM32的IWDG特性,框图和配置步骤。此外,给出了STM32的IWDG配置程序。通过一个简单的应用实例,展示了IWDG的配置和使用方法。


🎀 文章作者:二土电子
🐸 期待大家一起学习交流!


一、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框图

ffa2b5e9e5618ee94fb8dd12539da762_8b5ca73984564bd3bfd357896e607e17.png

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

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

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

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

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

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

ef1d0ccb2fe967a8b439616bce6d838d_465d249178a54a119de3e414d62d4bbf.png

三、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");
        }
    }
}

效果如下
ff7c077fc3e24adfbf9c8f32da9a5938_ed397b026fea4cc4a5c9c1845ab6d428.png

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

相关文章
|
4月前
|
存储 物联网 芯片
STM32速成笔记(十四)—串口IAP
本文介绍了什么是IAP,IAP有什么作用,如何实现IAP。最后,给出了IAP的实现程序。
83 0
STM32速成笔记(十四)—串口IAP
|
4月前
|
芯片 内存技术
STM32速成笔记(十三)—低功耗模式
本文介绍了三种STM32低功耗模式的进入和退出方法,针对待机唤醒给出了程序设计。
107 0
STM32速成笔记(十三)—低功耗模式
|
4月前
|
存储 芯片 内存技术
STM32速成笔记(十二)—Flash闪存
本文简单介绍了什么是Flash。针对STM32F1的Flash做了详细介绍,介绍了操作Flash的步骤,并且给出了程序设计。最后,介绍了一些注意事项。
29 0
STM32速成笔记(十二)—Flash闪存
|
4月前
|
存储 芯片
STM32速成笔记(十一)—EEPROM(AT24C02)
本文详细介绍了什么是AT24C02,介绍了它的引脚,读/写时序,给出了应用实例和详细的程序设计。最后,简单介绍了AT24C02的应用场景。
128 0
STM32速成笔记(十一)—EEPROM(AT24C02)
|
4月前
|
API
STM32速成笔记(九)—RTC
本文详细介绍了RTC模块,介绍了STM32的RTC的特性,框图,配置步骤,并给出了详细的程序设计。最后,针对实际使用时可能遇到的问题给出了解决方法以及程序。
46 0
STM32速成笔记(九)—RTC
|
4月前
|
存储 Perl
STM32速成笔记(八)—DMA
本文介绍了DMA的概念,用途。对于STM32F103ZET6的DMA做出了详细地介绍,给出了DMA配置步骤。最后,以配置DMA搬运ADC转换结果为例,给出了DMA的配置和使用方法。
71 0
STM32速成笔记(八)—DMA
|
4月前
|
存储 传感器
STM32速成笔记(七)—ADC
本文介绍了ADC的概念,用途,针对STM32的ADC做出了详细介绍,给出了配置步骤,配置程序。通过一个简单的小项目展示了ADC的配置和使用方法。此外,还针对如何利用定时器触发AD转换,如何采集交流信号,如何计算交流信号有效值进行了介绍,并给出了程序设计。
70 0
STM32速成笔记(七)—ADC
|
4月前
STM32速成笔记(六)—定时器
本文介绍了定时器的概念,作用。针对STM32F1的通用定时器做了详细介绍。此外,介绍了PWM的概念,用途以及STM32F1的PWM,给出了PWM频率的计算方法。最后通过介绍利用定时器的更新中断和PWM这两种方法实现呼吸灯,展示了定时器和PWM的配置步骤,并给出了详细的程序设计。另外,介绍了利用定时器实现按键长短按的检测方法。
97 0
STM32速成笔记(六)—定时器
|
4月前
|
芯片
STM32速成笔记(五)—串口通信
本文介绍了串口通信的概念,用途以及一些相关概念。介绍了如何进行printf重定向,如何根据接收到的特定信息,执行特定操作。此外,本文以通过上位机发送特殊指令控制LED亮灭的小项目,给出了详细的配置方法和程序设计。
105 0
STM32速成笔记(五)—串口通信
|
4月前
|
芯片
STM32速成笔记(四)—中断
本文介绍了中断的概念,中断的相关名词,STM32外部中断配置方法以及使用中断的注意事项。给出了外部中断点亮LED程序设计思路和关键代码。
133 0
STM32速成笔记(四)—中断