使用WDTCTL = WDT_ARST_1000;设置了看门狗,主循环里WDTCTL = WDT_ARST_1000;喂狗,程序正常工作;
当把主循环喂狗去掉,程序死掉,没有重启,WDTCTL时钟源由ACLK变为默认的SMCLK了,不明白为什么不重新启动
zhankui wang:
回复 Susan Yang:
使用下面的程序测试是没有问题的,包括重启
实际程序还有很多,看门狗部分和下面一样,涉及到看门狗定时器的也只是时钟源ACLK(32.768K)、SCLK(16M)
系统初始化ACLK我使用的外部时钟32.768K
当我把喂狗部分注释掉,完成的程序就不能重启了,一直卡在一个地方
//===========================================================================
void main()
{ WDTCTL = WDTPW + WDTHOLD;//关闭看门狗Sys_Init();//系统初始化Io_Init();Watchdog_Timer_Init ( ); while ( 1 ){P3OUT ^= BIT0 + BIT1 + BIT2;/lLEDdelay_ms(300);Watchdog_Timer_Init ( );//喂狗}
}
//==============================================
void Watchdog_Timer_Init ( void )
{WDTCTL = WDT_ARST_1000;
}
Hao Mengzhen:
回复 zhankui wang:
能debug看下卡在哪里吗
灰小子:
回复 zhankui wang:
建议先看看卡在哪里了
你在main函数里第一行WDTCTL = WDTPW + WDTHOLD,已经关闭看门狗了。
zhankui wang:
回复 灰小子:
下边Watchdog_Timer_Init ( );还会再打开