找回密码
 立即注册
查看: 99|回复: 3

AI8H4K32TLCD想实现低功耗唤醒后类似于重新上电的效果

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-07 10:12:57
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-7-7 10:12:57 | 显示全部楼层 |阅读模式
现在进入省电模式后,可以用IO,P5的边沿中断唤醒
现在有这样一个问题,唤醒后,想从程序刚开始的时候运行(像重新上电一样),查看手册,单片机应该没有这样的机制
在唤醒后,想使用软件复位的形式来达到这种效果。现在唤醒后,软件复位,不会像重新上电那样工作,程序卡住了的样子
时钟用到的内部高速,低速时钟,现象比较奇怪,不知道是什么原因。
截图202507071011486952.jpg

回复

使用道具 举报 送花

3

主题

2105

回帖

1058

积分

等待验证会员

积分
1058
发表于 2025-7-7 10:18:00 | 显示全部楼层
尊敬的用户:

您好!感谢您对STC8H4K32TLCD单片机的关注与使用。关于您提到的“低功耗唤醒后实现类似重新上电效果”的问题,我们已认真阅读并理解您的描述。

首先,针对您提到的“唤醒后程序无法从头运行”,目前该型号单片机并未提供直接支持“唤醒即重启”的机制。其省电模式(如STOP、IDLE等)仅是CPU进入低功耗状态,并未触发系统复位或初始化流程。因此,唤醒后程序将继续执行唤醒前的代码逻辑,而非重新开始。

其次,您尝试通过软件复位(SWR)来模拟重新上电的效果,但发现程序卡住,这可能是由以下原因导致:

1. 时钟配置异常:  
   在低功耗模式下,部分时钟源可能被关闭或切换。若唤醒后未正确重新初始化时钟系统,可能导致程序执行异常。建议在唤醒后检查并重新配置内部高速(HSI)和低速(LSI)时钟,确保其稳定运行。

2. 中断响应不及时:  
   若P5边沿中断未能正确触发唤醒,或中断服务程序中未进行必要的初始化操作,也可能导致程序执行异常。请确认中断配置是否完整,包括中断使能、优先级设置及中断服务函数的正确调用。

3. 系统状态未重置:  
   软件复位虽可重启部分寄存器,但不会像硬件复位那样完全清空所有状态。例如,某些外设寄存器、堆栈状态、变量值等仍可能保留。建议在复位后手动重置关键变量和外设配置,以确保程序运行环境的一致性。

4. 电源管理模块影响:  
   STC8H系列芯片在低功耗模式下,部分电源管理模块可能处于非活跃状态。唤醒后需确保相关模块已恢复正常工作,避免因电源不稳定导致程序执行异常。

综上所述,若您希望实现“唤醒即重启”的效果,可考虑以下方案:
在唤醒后,手动调用系统复位函数(如NVICSystemReset()),并确保复位前后时钟、中断、外设等配置一致。
在唤醒处理函数中,主动重置关键变量、重新初始化外设,模拟“重新上电”状态。
若需频繁唤醒并重启,建议结合外部电源管理模块,确保唤醒后的系统稳定性。

如您有进一步的技术问题或需要更详细的调试指导,请随时与我们联系。我们将竭诚为您服务。

祝工作顺利!

国芯人工智能技术团队  
2025年4月

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-08-01 07:33:38
已绑定手机

87

主题

5791

回帖

1万

积分

超级版主

DebugLab

积分
10398
发表于 2025-7-7 12:20:44 | 显示全部楼层
初始化打开EAXFR后,正确设置IAP_TPS,如工作频率接近极限频率,还要设置IRCDB=16
唤醒后先关闭内部32K时钟或外部32768时钟,再IAP_CONTR=0x60
试一下
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-07 10:12:57
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-7-7 13:28:56 | 显示全部楼层
感谢你们的回复!
现在发现问题,是这样IO边沿中断中,没有进行中断标志位软件清零,这个标志位需要手动清零,导致唤醒后一直处于中断响应状态,唤醒后无法回到正常的运行状态
软件重启失败,发现是判断内部时钟的稳定标志位,判断用错了,尴尬。


void Power_ISR_Handler (void)interrupt USER_VECTOR
{
        P5INTF = 0x00; //必须要手动加上
}



/*********************************************************
*********************************************************/
void Bsp_Power_Off(void)
{
        P5IM0 = 0x00;
        P5IM1 = 0x08;
        P5INTE = 0x08;
        P5WKUE |= 0x08;
        PCON |= 0x02;
        NOP(40);
        while((HIRCCR & 0x01) == 0);
        IAP_CONTR = 0x20;
}


回复中提到的NVICSystemReset()接口,并没有找到
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 20:17 , Processed in 0.121093 second(s), 65 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表