0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32速成笔记(10)—IWDG

冬至子 来源:二土电子 作者:二土电子 2023-10-24 14:58 次阅读

一、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配置程序

    44.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("复位系统rn");
    
    while(1)
  {
        gKeyValue = Med_KeyScan();   // 获取按键键值
        
        // WK UP按下
        if (gKeyValue == 1)
        {
            IWDG_FeedDog();   // 喂狗
            printf ("喂狗rn");
        }
    }
}

效果如下

图片

IWDG效果

按下WK UP喂狗,不会产生系统复位。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348738
  • IWDG
    +关注

    关注

    0

    文章

    21

    浏览量

    5136
  • rc振荡器
    +关注

    关注

    3

    文章

    43

    浏览量

    9452
  • 独立看门狗
    +关注

    关注

    0

    文章

    23

    浏览量

    3649
收藏 人收藏

    评论

    相关推荐

    STM32速成

    哟管STM32速成贴?求助
    发表于 01-23 14:34

    STM32CubeMX看门狗iwdg定时

    STM32CubeMX看门狗iwdg定时 笔记1.打开STM32cubeMX的工程文件重新配置,开启独立看门狗(IWDG)。2.生成报告以及
    发表于 07-30 07:17

    STM32_H750_IWDG 精选资料分享

    STM32_H750_IWDG__HAL_IWDG_START(&hiwdg1);HAL_IWDG_Refresh(&hiwdg1);iwdg时钟32k4096/(32k/4)=512ms实测延时506ms可以正常喂狗HAL_D
    发表于 08-02 09:50

    STM32F103独立看门狗IWDG使用笔记 精选资料分享

    本文使用STM32CubeMX1,在Pinout激活IWDG独立看门狗2,在Configration 中点击System-> IWDG 设置看门狗参数,我使用700ms设置如下,生成的初始化
    发表于 08-02 10:02

    STM32使用IWDG死机

    STM32使用IWDG死机嗯,不知道怎么说,stm32的看门狗死机了,下面是仿真时报错信息:The processor has escalated a configurable-priority
    发表于 08-02 08:50

    使用HAL_IWDG库让IWDG工作,为什么无法在IWDG_Reset之前刷新看门狗?

    /en.STM32WB-WDG_TIMERS-Independent-Watchdog-IWDG.pdf当 RL < WINR 时,我必须刷新看门狗看门狗超时设置为 10 秒。wdgReset
    发表于 02-08 07:26

    STM32F446ZE-Nucleo-IWDG

    单片机开发板STM32F446ZE-Nucleo的开发例程IWDG
    发表于 06-03 15:48 8次下载

    STM32469I_EVAL-IWDG

    单片机开发板STM32469I_EVAL的开发例程STM32469I_EVAL-IWDG
    发表于 06-03 15:48 8次下载

    STM32各模块学习笔记

    STM32个模块学习笔记 目录 STM32笔记之一 中断优先级.....................................................1
    发表于 11-30 03:32 2981次阅读

    STM32看门狗WWDG和IWDG的区别是什么

    STM32有2个看门狗:独立看门狗和窗口看门狗。 独立看门狗IWDG:独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
    发表于 05-17 13:51 1.5w次阅读
    <b class='flag-5'>STM32</b>看门狗WWDG和<b class='flag-5'>IWDG</b>的区别是什么

    如何解决STM32在擦除内部FLASH时间过长导致IWDG复位的问题

    客户反馈在使用STM32F412的时候,擦除Sector 8~11发现时间过长,从而导致意外触发IWDG复位。原因是什么?怎么避免?怎么处理?
    的头像 发表于 01-29 11:53 1.5w次阅读
    如何解决<b class='flag-5'>STM32</b>在擦除内部FLASH时间过长导致<b class='flag-5'>IWDG</b>复位的问题

    STM32擦除内部FLASH时间过长导致IWDG复位

    STM32擦除内部FLASH时间过长导致IWDG复位(嵌入式开发一般采用什么方式?)-客户反馈在使用STM32F412的时候,擦除sector 8~11发现时间过长,从而导致意外触发IWDG
    发表于 07-30 11:06 3次下载
    <b class='flag-5'>STM32</b>擦除内部FLASH时间过长导致<b class='flag-5'>IWDG</b>复位

    MCU学习笔记_IWDG独立看门狗

    MCU学习笔记IWDG独立看门狗1. IWDG独立看门狗概述2. 寄存器和HAL库函数配置3. 实例1. IWDG独立看门狗概述看门狗,watchdog,用于检测单片机程序运行状态的模
    发表于 10-28 20:21 9次下载
    MCU学习<b class='flag-5'>笔记</b>_<b class='flag-5'>IWDG</b>独立看门狗

    【MCU】基于STM32CubeMX 实现独立看门狗 IWDG

    STM32F10X 独立看门狗 IWDG1. IWDG 简介(1)STM32F10X内置了独立看门狗 IWDG,其可用来检查和解决由软件错误
    发表于 11-05 15:51 10次下载
    【MCU】基于<b class='flag-5'>STM32</b>CubeMX 实现独立看门狗 <b class='flag-5'>IWDG</b>

    STM32核心笔记

    STM32核心笔记文章目录STM32核心笔记1. 下载程序的两种方式1.1 串口ISP1.2 仿真器2. 认识寄存器3. 地址总线与外设地址映射关系4. GPIO的三种配置5. 时钟树
    发表于 12-04 12:21 1次下载
    <b class='flag-5'>STM32</b>核心<b class='flag-5'>笔记</b>