先找到独立看门狗使用的时钟源:通过数据手册查看时钟树
/**
-
@brief : 独立看门狗初始化
-
@param :
-
@retval: 设计溢出时间为1S钟的独立看门狗
/
void InitIwdg(void)
{
/* 往IWDG_KR寄存器写0x5555 **/
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //去除IWDG_PR和IWDG_RLR寄存器的写保护IWDG_SetPrescaler(IWDG_Prescaler_64); //设置分频值为64分频,操作的就是IWDG_PR寄存器
IWDG_SetReload(625); //设置重装载值为625,操作的就是IWDG_RLR寄存器
/** 往IWDG_KR寄存器写入0xAAAA **/
IWDG_ReloadCounter(); //喂狗填充寄存器,初始化时寄存器为空,在每次喂狗的地方也是调用这个函数/** 往IWDG_KR寄存器写入0xCCCC **/
IWDG_Enable(); //启动看门狗工作
}
看门狗溢出时间计算:
1 / (40KHz / 64) = 0.0016(S) //这是计数器每减一所用时间
0.0016 * 625 = 1(S) //每减一的时间乘重装载值就是溢出时间
以下贴出寄存器介绍: