STC15W4K系列单片机,看门狗复位后系统内存不清零的问题!

2020-03-07 17:54发布

本帖最后由 QQ826220679 于 2020-1-21 13:44 编辑

最近在做一个项目,用到了STC15W4K56S4单片机,程序开启了看门狗,由于和外部通讯,当通讯数据量大到一定程度,,程序会出现异常跑飞,这时候看门狗就会让系统复位,以上的这些,在我们理解中是完全合理的。

不过,令我不解的是,看门狗复位之后,程序依然在跑飞的状态,这时,看门狗又让系统复位,复位后,依然在跑飞的状态…… 这样一直循环。
如果这时候断电冷启动,系统就会运行正常。 打电话到STC技术支持,问为什么看门狗复位后系统内存不清零的问题,并没有给出解决办法。

由于本人才疏学浅,所以这里,请懂的朋友给解释一下问题的原因和解决办法!

谢谢大家!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
QQ826220679
1楼-- · 2020-03-08 17:53
ayb_ice 发表于 2020-1-21 14:16
还要看程序本身有没有区别对待冷起动与热起动(WDT动作)

/*--------------------------------------------------*/
/*函数名:WDT初始化                                                                        */
/*参  数:无                                                                                */
/*返回值:无                                                                                */
/*--------------------------------------------------*/
void WDT_Init()
{
        WDT_CONTR = 0x06;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
                            //设置看门狗定时器分频数为128,溢出时间如下:
                            //11.0592M : 4.55s
                            //12M  : 4.19
                                                        //24M  :2.097
        WDT_CONTR |= 0x20;      //启动看门狗
        WDT_CONTR |= 0x10;      //清零看门狗 //喂狗
        //IAP_CONTR = 0x20; //手动软件复位,系统重新从用户代码区开始运行程序
        //IAP_CONTR = 0x60; //手动软件复位,系统重新从ISP代码区开始运行程序
        IAP_CONTR = 0x40;         //看门狗软件复位,系统重新从ISP代码区开始运行程序
        //SWBS/IAP_C_CONTR.6的值为1,则看门口复位状态结束后上述系列单片机将从系统监控程序启动
        //SWBS/IAP_C_CONTR.6的值为0,则看门口复位状态结束后上述系列单片机将从用户应用程序启动
}

这部分也仔细看了。
ayb_ice
2楼-- · 2020-03-08 18:16
QQ826220679 发表于 2020-1-21 14:29
/*--------------------------------------------------*/
/*函数名:WDT初始化                                                                        */
/*参  数:无 ...

这只是初始化,并不说明复位后没有区别对待
从复位地址开始看下,启动代码里有没有什么特别情况
QQ826220679
3楼-- · 2020-03-08 19:03
ayb_ice 发表于 2020-1-21 14:37
这只是初始化,并不说明复位后没有区别对待
从复位地址开始看下,启动代码里有没有什么特别情况
...

STC手册和别的厂家的比真是一团乱,我没找到这方面说明。
ayb_ice
4楼-- · 2020-03-08 19:14
QQ826220679 发表于 2020-1-21 14:43
STC手册和别的厂家的比真是一团乱,我没找到这方面说明。

这个问题应该容易处理,
我也用STC的芯片啊
软件复位后很正常啊
WDT没试过
你把起动代码发上来看下
ayb_ice
5楼-- · 2020-03-09 00:11
 精彩回答 2  元偷偷看……
12864
6楼-- · 2020-03-09 02:01
我一般软件复位都是从ISP区开始执行,就是IAP_CONTR中SWBS=1,没试过从用户程序区开始执行。会不会如果从用户区复位会导致一些SFR没有回到正确复位状态呢,比如SP。原始51是没有软件复位功能的,如果强制程序回到0000执行,不但所有SFR不会回到上电默认值,SP也同样会出问题

前些日子一块新板子遇到上电后频繁复位的情况,查明是AD芯片引脚虚焊导致的,但我在等待AD的RDY信号的时候,我频繁调用休眠和喂狗指令的,不知道为何还会导致看门狗复位,因为很快排除了虚焊问题,所以也没有深究,只是表示了疑惑不解。

一周热门 更多>