SWDT
SWDT通常使用内部专用时钟源(如低速内部RC振荡器,频率固定为10kHz),该时钟源独立于系统主时钟(如PCLK3),因此即使外部晶振或PLL故障导致系统时钟失效,SWDT仍能正常计数,可靠性较高。
WDT
WDT则依赖系统时钟(如PCLK3)作为时钟源,其计数精度较高,但若系统时钟因故障停止,WDT也会随之停止计数,从而丧失看门狗功能。
启用SWDT DLL
c
hc32a4xx_conf.h
#define LL_SWDT_ENABLE (DDL_ON)
SWDT程序
看门狗时间 ≈ (计数周期 * 时钟分频系数 / 10 000 )s
4096 * 128 / 10000 = 52秒
c
static void App_SWDTCfg(void)
{
stc_swdt_init_t stcSwdtInit;
/* SWDT配置 */
stcSwdtInit.u32CountPeriod = SWDT_CNT_PERIOD4096;
stcSwdtInit.u32ClockDiv = SWDT_CLK_DIV128;
stcSwdtInit.u32RefreshRange = SWDT_RANGE_0TO100PCT;
stcSwdtInit.u32LPMCount = SWDT_LPM_CNT_CONT;
stcSwdtInit.u32ExceptionType = SWDT_EXP_TYPE_RST;
(void)SWDT_Init(&stcSwdtInit);
/* 启动看门狗 */
SWDT_FeedDog();
}
void main(void)
{
App_SWDTCfg();
while(1) {
DDL_DelayMS(1000);
SWDT_FeedDog();
DDL_DelayMS(1000);
SWDT_FeedDog();
}
}