参考:
-正点原子IWDG

介绍

简介

作用

工作原理

框图

寄存器

溢出时间

计算公式:

f1超时时间

f4,f7,h7超时时间

hal库

相关函数

配置步骤

示例

初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @brief 初始化独立看门狗
* @param prer: IWDG_PRESCALER_4~IWDG_PRESCALER_256,对应4~256分频
* @arg 分频因子 = 4 * 2^prer. 但最大值只能是256!
* @param rlr: 自动重装载值,0~0XFFF.
* @note 时间计算(大概):Tout=((4 * 2^prer) * rlr) / 40 (ms).
* @retval 无
*/
void iwdg_init(uint8_t prer, uint16_t rlr)
{
g_iwdg_handle.Instance = IWDG;
g_iwdg_handle.Init.Prescaler = prer; /* 设置IWDG分频系数 */
g_iwdg_handle.Init.Reload = rlr; /* 重装载值 */
HAL_IWDG_Init(&g_iwdg_handle); /* 初始化IWDG并启动 */
}

喂狗

1
2
3
4
5
6
7
8
9
/**
* @brief 喂独立看门狗
* @param 无
* @retval 无
*/
void iwdg_feed(void)
{
HAL_IWDG_Refresh(&g_iwdg_handle); /* 重装载计数器 */
}

主函数

int main(void)
{
    iwdg_init(IWDG_PRESCALER_64, 625);      /* 预分频数为64,重载值为625,溢出时间约为1s */
    while (1)
    {
        if (key_scan(1) == KEY0_PRES)       /* 如果WK_UP按下,则喂狗 */
        {
            iwdg_feed();                    /* 喂狗 */
        }

        delay_ms(10);
    }
}