1.IWDG简介

IWDG全程Independt Watchdog,即独立看门狗。其本质是能产生系统复位信号的计数器,它的时钟由独立的RC振荡器提供(可在待机和停止模式下运行,独立看门狗被激活以后,当计数器递减到0X0000的时产生复位。)在计数器计时到0之前,通过喂狗,重装载计数器的值,防止复位。F407的lsi时钟频率通过查阅手册为32kHz,如下。


2.IWDG的作用

1.异常:外界电磁干扰或者自身系统(硬件或软件)异常造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行

2.作用:主要用于检测外界电磁干扰,或程序跑飞问题

3.应用:在一些需要高稳定性的产品中,并且对精度要求较低的场合。

ps:独立看门狗是异常处理的最后手段,不可依赖,应尽量避免异常的发生!

2.1 溢出时间计算

T = 预分频系数 * 看门狗重装载值 / 时钟源频率

2.2 独立看门狗配置过程

1.取消PR(预分频)/RLR(重装载)寄存器保护

2.设置预分频和重装载寄存器系数,启动IWDG。

void IWDG_Init(void)
{
    hiwdg.Instance = IWDG;
    hiwdg.Init.Prescaler = IWDG_PRESCALER_32;   //设置IWDG分频系数
    hiwdg.Init.Reload = 1000 * 3;       //3秒喂狗
    HAL_IWDG_Init(&hiwdg);      //初始化IWDG
}

超时时间 = 3000 * 32 / 32000 = 3s。只要3s没有喂狗,即会复位。

main函数

IWDG_HandleTypeDef hiwdg;
void main_thread(void* pArg)
{
    IWDG_Init();
    uint8_t nCnt = 0;

    while (1)
    {
        HAL_IWDG_Refresh(&hiwdg);
        Gpio_setPinToggle(&xLed);          //生命信号指示灯闪亮
        osDelay(500);
    }
}

验证:注释掉喂狗函数,程序3s即复位一次。


Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐