MCU死机,无法唤醒
使用芯片:STC32G12K128, 目前产品已经出货约3000套,现在客户陆续退回来5台,现象:产品处于卡死状态,对充电/按键/通讯等行为无反应;且断电MCU重新供电后恢复正常,测量了一些状态后发现芯片处于进入休眠后的状态,且充电/按键/通讯都无法唤醒;
唤醒的中断源有:按键检测中断,充电唤醒IO口中断,负载检测IO口中断,通讯检测IO口中断;此外通过外部晶振32.768k晶振设置了定时1小时唤醒的RTC;卡死的产品没有RTC唤醒的现象,且对设置的中断均无反应;
备注:产品已开启了看门狗;且我检查代码,并未发现有关闭中断IO的数字输入语句,麻烦帮忙看一下,这个死机问题是什么导致的?
你可以做个日志,把重要代码的执行过程,记录到日志中,对于那些死机的,这样就能看到究竟是卡死到那一步不能继续运行了 正在做掉电唤醒的程序,关注下。
青穗三三 发表于 2026-2-9 10:43
你可以做个日志,把重要代码的执行过程,记录到日志中,对于那些死机的,这样就能看到究竟是卡死到那一步不 ...
嗯嗯,你说的是一种后续的处理方法而且不是解决方案,都是现在的问题是客户需要现在就找出原因给出解决方案,客户的设备不可能给你用来测试排除问题的 wonderwhy 发表于 2026-2-9 11:09
嗯嗯,你说的是一种后续的处理方法而且不是解决方案,都是现在的问题是客户需要现在就找出原因给出解决方 ...
而且这个问题不是必现的,这个就很麻烦,我也是没招了,不知道STC有没有什么办法 第一,怎么确定,就算现在找出这个解决办法,因为问题不是必现的,你怎么确定你解决了。所以我说的程序上这部分加上日志,你还得弄
第二,可以外边挂上一个电路,主要作用是一段时间能没有和这个电路通信,就把你这个产品重启供电。
第三,给你看一下我的低功耗操作逻辑
//低功耗进入
if (myADCDat.ad_Vref>1218 && PIN_KEY_Get()==0)//若电压低于4V,并且按键检测到0
{
//关闭耗电设备
P35 = 1;//关闭红灯
P36 = 1;//关闭绿灯
P33 = 0;//取消阀动作
P54 = 0;//不短路5.1K电阻
RecordAdd(RECORD_TYPE_POWER_DOWN);//掉电记录
EXT0_MODE_RiseFall();//设置外部中断边沿触发
EXT0_ENABLE();//使能外部中断
//将所有端口置为高阻状态
P1M1=0xFF; P1M0=0;
P3M1=0xFF; P3M0=0;
P5M1=0xFF; P5M0=0;
//将一些引脚的数字输入功能给关闭
P1IE=0x00; P3IE=0x04;
ADC_CONTR &= ~0x80;//关闭ADC电源
CMPCR1 &= ~0x80;//关闭比较器
while (1)//避免被非唤醒目标唤醒
{
SYSTEM_PD();//进入掉电模式
_nop_();
_nop_();
_nop_();
_nop_();
FeedDog();
}
}
void X0_ISR() interrupt INTERRUPT_X0
{
RTC_TimeGet(&rtc);
Flash_WritesU8(MCU_STORAGE_RTC,(u8 *)&rtc,sizeof(rtc));
SYSTEM_RESET_ISP();
} 主频接近极限频率需要在初始化时正确设置IAP_TPS并设置IRCDB=16尤其是需要使用省电模式唤醒的情况 青穗三三 发表于 2026-2-9 11:50
第一,怎么确定,就算现在找出这个解决办法,因为问题不是必现的,你怎么确定你解决了。所以我说的程序上这 ...
嗯嗯,你说的也是;日志确实后面需要加上;外挂电路这个搞不了,产品做了认证至少硬件层面动不了;感谢分享 DebugLab 发表于 2026-2-9 12:51
主频接近极限频率需要在初始化时正确设置IAP_TPS并设置IRCDB=16尤其是需要使用省电模式唤醒的情况 ...
目前MCU频率为24M,这个是否接近极限频率 DebugLab 发表于 2026-2-9 14:19
后缀-24A的可能算是,不管这些直接加上就行,又没有坏处
目前代码确实没有加IRCDB=16这句,我排查我们用的这个芯片的后缀是-35I;我想知道不加的话会出现怎么样;手册上说的稳定是什么意思,会是导致死机的原因吗
页:
[1]
2