独立看门狗(IWDG)

前言

本文以STM32F10系列的开发板,分享独立看门狗IWDG基础知识点。


文章目录


一、独立看门狗(IWDG)概述

(1)独立看门狗主要作用是用于检测外接电磁干扰,或者硬件异常导致的程序跑飞问题。

(2)IWDG本质上是一个12位的递减计数器。当计数器的值从某个初始值开始递减,并且一直减到0时,系统会产生一个复位信号(IWDG_RESET)。CPU在接收到这个信号之后,会重新启动系统,以确保系统从可能的错误或者死锁状态中恢复。

(3)在计数器值减到之前,如果程序通过特定的喂狗操作(即重置计数器的值)来刷新计数器,那么就不会产生复位信号,系统将继续正常运行。

(4)这种喂狗操作,是由程序在正常运行时,定期执行的,以确保IWDG不会因计数器超时(计数器递减到0)而产生复位信号。

(5)独立看门狗使用专用的低速时钟(LSI)作为时钟源,即使在主时钟发生故障时,IWDG依然能够继续运行。

(6)简化版IWDG框图

(7)看门狗处于VDD供电区,在停机以及待机模式下任然能够正常工作。

二、相关寄存器介绍

(1)键寄存器

  • 其中写入0xAAAA就是具体的"喂狗"操作
  • 写入0x5555就表示允许访问PR寄存器(预分频寄存器)、RLR寄存器(重装载寄存器),只有这个寄存器被写入了0x5555,后面那两个寄存器才能被配置,否则只读。
  • 写入0XCCCC则开启看门狗,(看门狗一旦开启就无法停止)。

(2)预分频寄存器

(3)重装载寄存器

三、相关函数介绍

其HAL库函数很少,就两个,一个初始化函数(Init),一个喂狗函数(Refresh).

四、IWDG溢出时间的计算

(1)

其中psc / f 实际上就是一个时钟周期("数一个数")需要多久。(因为 f / psc表示的是,输入时钟频率通过分频后得到,看门狗计时器的实际频率,取了个倒数么。)

(2)

(3)IWDG的预分频设为4时,最短超时(计数器递减到0)时间为0.1毫秒,最长为409.6毫秒

五、IWDG配置步骤

六、独立看门狗小实验

配置IWDG的溢出时间为1s左右,并验证为即使喂狗,系统将被复位。

c 复制代码
/*
mian.c文件
*/

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "iwdg.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    led_init();                         /* 初始化LED灯 */
    uart1_init(115200);
    iwdg_init(16,2500);     //超时时间设置为1s
    printf("请喂狗,否则系统复位\r\n");
    


    while(1)
    { 

    delay_ms(500);//IWDG超时设置为了大概1s左右,这里500ms延时,则不会超时复位系统
    iwdg_feed();
    printf("已经喂狗,不会复位系统\r\n");
        
        
/*
    delay_ms(1500);//IWDG超时设置为了大概1s左右,这里1500ms延时,则超时,复位系统
    iwdg_feed();
    printf("已经喂狗,不会复位系统\r\n");
*/
        
    }
}


/*
iwdg.c文件
*/
#include "iwdg.h"

IWDG_HandleTypeDef iwgd_handle={0};


void iwdg_init(uint8_t pr,uint16_t rlr)
{
    iwgd_handle.Instance=IWDG;
    iwgd_handle.Init.Prescaler = pr;
    iwgd_handle.Init.Reload = rlr;
    HAL_IWDG_Init(&iwgd_handle);
    __HAL_IWDG_START(&iwgd_handle);
}

void iwdg_feed(void)
{
    
    HAL_IWDG_Refresh(&iwgd_handle);
}
相关推荐
小柯博客24 分钟前
01 · 点亮 STM32MP25 的硬件视频编解码:VPU 与那些“安静“的坑
c语言·笔记·stm32·单片机·嵌入式硬件·嵌入式·视频编解码
zcmodeltech15 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
笨笨饿18 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
捷瑞电子工坊18 小时前
FreeRTOS事件组:多任务同步的利器
stm32·嵌入式·freertos·实时操作系统·标准外设库·事件组·任务同步
笨笨饿20 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
qq_4017004120 小时前
ADC基准电压与参考电压详细解读:以STM32和28335为例
stm32·单片机·嵌入式硬件
小僧景贤20 小时前
STM32 startup.s 启动文件与 .map 映射文件深度技术解析(md/hd 版本差异化对比)
stm32·内存映射·startup.s·map 文件·单片机启动流程
zcmodeltech1 天前
水利水电沙盘模型控制系统设计与实现:多场景多工况联动方案
网络·stm32·嵌入式硬件·制造·多分类
LCG元1 天前
STM32 软件模拟 I2C 驱动 AT24C02 EEPROM:从时序原理到实测读写全记录
stm32·单片机·嵌入式硬件
振南的单片机世界1 天前
终端电阻硬核拆解:不接120Ω,RS485信号“撞墙反弹”乱码
arm开发·stm32·单片机·嵌入式硬件