STC15W系列单片机休眠唤醒与看门狗配置问题
本次是记录自己在STC单片机低功耗模式下使用过程中遇到的一些问题。本来想这是一件简单的事情,三下五除二就能解决问题了。在实际配置中却遇到了一些波折,在这里做一个学习记录,方便以后自己查看。
关于STC单片机之定时器唤醒与看门狗寄存器配置
最开始的时候,我先完计数周期配置,最后再使能定时器唤醒。结果不论怎么配置,总时间都不变。经过多次测试摸索,最后确定WKTCH寄存器要一次完成写入配置。
正确配置,如:
void sy_sys_wakeup(void){
unsigned short timer = 0;
// timer = 16384;
timer = 8192;//唤醒时间
if(timer>=0x7fff)timer = 0x7fff;
timer |= 0x8000;
WKTCL = timer%256;
WKTCH = timer/256;
}
错误配置,如:
void sy_sys_wakeup(void){
unsigned short timer = 0;
// timer = 16384;
timer = 8192;//唤醒时间
if(timer>=0x7fff)timer = 0x7fff;
WKTCL = timer%256;
WKTCH = timer/256;
WKTCH |=0x80;
}
硬件看门狗
STC15单片机看门狗配置起来很简单,只需要配置一个寄存器就好了。当然了,现实中,如果没有遇到一点点曲折,我也不会写这篇文章了。
故事事这样的:最开始的时候,我已经配置好休眠唤醒了,单片机利用唤醒寄存器,进行周期唤醒。即,单片机配置为: PCON |= 0x02。最后实测发现,我配置看门狗复位为2秒,结果经过了1分钟也没有出现复位重启问题。开始怀疑自己配置问题,查阅芯片手册,研究来研究去,也没有发现自己配置上的错误。后面经过了大半天时间,猜想到会不会是休眠计数器不走引起的呢?
后面一试将PCON |= 0x02注释掉,结果就正常复位了。验证了自己猜想。
硬件看门狗配置
这个配置起来很简单,具体参考STC用户手册即可。如下,是自己配置的一个参考:
void sy_sys_dog_init(void){
WDT_CONTR = 0x27; //配置为最长周期
}
void sy_dog_load(void)
{
WDT_CONTR |= 0x10; //启动看门狗
}
主程序参考配置
void mian(void){
................
sy_sys_wakeup(); //定时唤醒
sy_sys_dog_init();
while(1){
// usaer handle
sy_dog_load();
PCON |= 0x02;
_nop_();
_nop_();
_nop_();
}
}