独立看门狗知识点:
- 关键字寄存器IWDG_KR: a、写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET); b、写入0xAAAA(无论何时), IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位; c、写入0x5555,取消寄存器IWDG_PR和IWDG_RLR的保护功能,写入其他值会重新开启写保护(包括0xAAAA)。
- 预分频寄存器IWDG_PR:
- 重装载寄存器IWDG_RLR:用来保存重装载到计数器中的值;
- 看门狗溢出时间Tout= ( (4* 2^prer) * rlr ) / 32 : Tout为看门狗溢出时间(单位为ms); prer为看门狗时钟预分频值(IWDG_PR值),范围为0~7;rlr为看门狗的重装载值(IWDG_RLR的值)。
独立看门狗配置步骤:
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_Handler.Instance=IWDG;
IWDG_Handler.Init.Prescaler=prer; //设置IWDG分频系数
IWDG_Handler.Init.Reload=rlr; //重装载值
HAL_IWDG_Init(&IWDG_Handler);
HAL_IWDG_Start(&IWDG_Handler); //开启独立看门狗
}
void IWDG_Feed(void)
{
HAL_IWDG_Refresh(&IWDG_Handler); //喂狗
}
- 取消寄存器写保护,设置看门狗预分频系数和重装载值
-
重载计数值喂狗(向IWDG_KR写入0XAAAA) 编写函数IWDG_Feed,调用函数HAL_IWDG_Refresh来喂狗;
-
启动看门狗(向IWDG_KR写入0XCCCC) 通过调用函数HAL_IWDG_Start启动看门狗。