IWDG

发布时间 2023-08-12 11:38:16作者: Yannnnnnn

/*
independent watchdog IWDG

本质:能产生系统复位的计数器

特性:递减,独立RC振荡器提供时钟(LSI),待机模式可运行
递减到0x000时产生复位信号

作用:异常处理最后手段

*启动IWDG后 LSI自动开启
LSI 32KHz

密钥寄存器 IWDG_KR
0xAAAA == 喂狗
0x5555 == 允许访问IWDG_PR(预分频器R),IWDG_RLR(重装载R)
0xCCCC == 软件启动IWDG

LSI频率:fLSI == 32,000Hz
分频系数:psc == 选择4分频
重装载值:rlr == 0x001 到 0xFFF
溢出时间Tout == rlr * 1/(fLSI / psc)

最短Tout == 1 * 1/(32000 / 4) == 0.000125s = 0.125ms
最长Tout == 0xFFF * 0.000125s == 0.511875s = 512ms
*/

IWDG初始化函数

/*创建IWDG句柄h_iwdg*/
IWDG_HandleTypeDef h_iwdg;

/*初始化IWDG*/
void IWDG_Init(void)
{
    /*h_iwdg参数选择*/
    h_iwdg.Instance = IWDG;                     //h_iwdg 关联 IWDG
    h_iwdg.Init.Prescaler = IWDG_PRESCALER_4;   //分频系数4分频 
    h_iwdg.Init.Reload = 4095;                  //0xFFF,溢出时间最长Tout == 0xFFF * 0.000125s == 0.511875s = 512ms
    
    /*使用HAL_IWDG_Init()配置h_iwdg*/
    if(HAL_IWDG_Init(&h_iwdg) != HAL_OK)
    {
        Error_Handler();
    }

}