看门狗1最低配置要求(看门狗1占电脑多少g)

看门狗1最低配置要求(看门狗1占电脑多少g)

stm32的独立看门狗在配置一次后,如果后续想改变其喂狗周期,再次配置无法生效起作用,除非单片机重启配置才生效

在应用中,我们经常会使用看门狗防护系统跑飞问题,在正常情况下,一般设置几秒钟的喂狗时间。

但有时候,系统在未检测到事件时,往往想休眠的周期加大,比如20-30的周期。虽然说也可通过数周期方式来实现,但有时项目中就需要极低的功耗,大周期的喂狗时间也是必需的。

但在正常运行时又不得不缩短喂狗周期,防止系统死机后反应时间太慢。这就不得不想要可灵活设置看门狗周期了。

目前在使用stmL1系列中,标准库下对看门狗的使用案例都无法可灵活设置看门狗周期,第二次配置无效,除非先重启单片机,在重启后使用另外的参数配置看门狗周期,但这样的操作对系统的使用来说很不友好,重启后所有外设都需要重新配置,而且还可能不能保证之前的状态。

这一想法也是好长时间实现不了,后来在对RTC灵活配置周期的应用时来了灵感,使用此类似方法可以对看门狗灵活配置生效。如下代码参考:

WDG_Config(false);//5sRCC->CSR |= RCC_CSR_RTCRST;RCC->CSR &= ~RCC_CSR_RTCRST;RTC_WakeUpCmd(DISABLE);//wakeup关闭RCC_RTCCLKCmd(DISABLE);//时钟得关闭WDG_Config(true);//约26s左右void WDG_Config(uint8 maxPeriodEnable){uint16 period;uint8 prescaler;if(maxPeriodEnable) { period = xx0 prescaler = pp0 }else { period = xx1; prescaler = pp1; }if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET){ RCC_ClearFlag(); }RCC_LSICmd(ENABLE); //这里启用LSIwhile(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET); IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) ;while (IWDG->SR & 0x01);IWDG_SetPrescaler(prescaler);while (IWDG->SR & 0x02);IWDG_SetReload(period);IWDG_ReloadCounter();IWDG_Enable();}

在上述代码中,

RCC->CSR |= RCC_CSR_RTCRST;RCC->CSR &= ~RCC_CSR_RTCRST;RTC_WakeUpCmd(DISABLE);//wakeup关闭RCC_RTCCLKCmd(DISABLE); //时钟得关闭

这几行代码才真正对看门狗的灵活配置起作用,这也是我尝试很多配置才试验成功得出来的。