void bsp_InitIwdg(uint32_t _ulIWDGTime)
{
/* 检测系统是否从独立看门狗复位中恢复 */
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
{
/* 清除复位标志 */
RCC_ClearFlag();
}
else
{
/* 标志没有设置 */
}
/* 写入0x5555表示允许访问IWDG_PR 和IWDG_RLR寄存器 */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* LSI/256 分频*/
IWDG_SetPrescaler(IWDG_Prescaler_256);// 其中IWDG_Prescaler_256=0x06
IWDG_SetReload(_ulIWDGTime);
/* 重载IWDG计数 */
IWDG_ReloadCounter();
/* 使能 IWDG (LSI oscillator 由硬件使能) */
IWDG_Enable();
}
本段代码主要是配置看门狗的刷新超时时间,可以通过公式计算:T_out = _ulIWDGTime*(4*2^IWDG_Prescaler_256)/LSI frequency
在超时时间内进行喂狗,便可以防止复位。
喂狗函数:
void IWDG_Feed(void)
{
IWDG_ReloadCounter();
}