本帖最后由 L-MCU 于 2024-6-28 10:37 编辑
CH32L103设有独立看门狗(IWDG)和窗口看门狗(WWDG)。关于其具体介绍,可看CH32L103应用手册。
1、独立看门狗(IWDG) 独立看门狗是一个12位自减型计数器,时钟源为LSI,当计数器值减到0时MCU会进行复位。 独立看门狗可在低功耗模式下运行,可将MCU从待机模式下唤醒,当计数器值减到0时会复位唤醒。 CH32L103 EVT提供了独立看门狗例程,例程中配置3.2s复位,即要在3.2s内进行喂狗,若不喂狗则会进行复位。关于3.2s的计算,具体计算步骤如下: (1)根据程序配置,设置看门狗时基为LSI 32分频,重装载值为4000。根据L103数据手册,LSI的大小约为40KHz。程序以及相关参数见下图: (2)LSI的大小为40KHz,32分频,则时基为1/(40KHz/32),即计数一次的时间为0.8ms; (3)重装载值为4000,计数一次时间为0.8ms,则计数器递减到0大约需要3200ms,即3.2s。
2、窗口看门狗(WWDG) 窗口看门狗是一个可编程的7位自减型计数器,当计数器值小于 0x40或计数器值在窗口时间外被重装载时将会复位。具有唤醒提前通知功能(EWI),用于及时喂狗动作防止系统复位。 CH32L103 EVT提供了窗口看门狗例程。关于窗口看门狗,顾名思义,其有一个上限值和一个下限值。其中,下限值为计数器值小于0x40,即达到0x3F时会进行复位;上限值通过WWDG配置寄存器(WWDG_CFGR)位[6:0]进行配置,如下图,喂狗操作在计数器值小于窗口值且大于0x3F时进行。在这区间进行喂狗操作,则MCU不会进行复位。 EVT WWDG例程中,配置WWDG计数器值为0x7F,窗口值为0x5F,时钟分频为8分频。 WWDG计数器值主要是对WWDG 控制寄存器(WWDG_CTLR)位[6:0]进行配置,如下图: WWDG窗口值主要是对WWDG配置寄存器(WWDG_CFGR)位[6:0]进行配置,如下图: WWDG时钟分频主要是对WWDG配置寄存器(WWDG_CFGR)位[8:7]进行配置,如上图。 程序中,还对提前唤醒中断使能位进行配置,主要是对WWDG配置寄存器(WWDG_CFGR)位1进行置1,如上图。该位置1后,在自减计数器值达到0x40时产生中断。 WWDG例程中,在while循环里将自减计数器的值与窗口值进行比较,当计数器值小于窗口值时,则进行喂狗操作,确保MCU不会复位。喂狗操作主要是对WWDG 控制寄存器(WWDG_CTLR)位[6:0]进行配置,配置值为0x7F。
关于IWDG以及WWDG具体例程,可参考CH32L103 EVT。
|