找回密码
 立即注册
查看: 169|回复: 6

8H 掉电模式偶尔唤不醒 | 已解决

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

2

主题

3

回帖

24

积分

新手上路

积分
24
发表于 2025-7-25 14:12:29 | 显示全部楼层 |阅读模式
请教一下大家,做了个按键矩阵(2个外部中断+4个普通IO),外部中断是INT0、INT1,但有时候按键按下就再也无法退出低功耗模式了,出现问题的时候,打印信息显示停在了Sleeping!(正常是进入省电模式前,会打印Sleeping!,退出省电模式后会打印wakeup).
以下是部分代码:

void main(void)
{
        System_Init();
        
        while(1)
        {               
                if(Key_Lock && TX_Data_Ready)
                {
                        printf("Sending!  \n");
                        Key_Handle(key_value);               
                }        
        delay_ms(2);               
            if(!Key_Lock && !INT_State )  
                        Enter_PowerDown();
        }
}



void        System_Init(void)

{   
        EAXSFR();
        IRCDB = 0x10;
        
        GPIO_config( );
        Exti_config( );
        UART_config( );
    Timer0_Init();
        LT8960L_INIT();
        delay_ms(5);
        LT8960L_Sleep();    //低功耗
        
    EA = 1;         //开启总中断
        PCON|=0x02;        //掉电
}

void Enter_PowerDown(void)
{
        Ext_Init();  //进入低功耗前初始化外部中断,但并没有解决偶尔无法唤醒的问题
        printf("Sleeping!  \n");

        
    PCON |= 0x02;       // 进入掉电模式
    _nop_();_nop_();
        _nop_();_nop_();
        _nop_();_nop_();
        _nop_();
                        
        printf("Wakeup!  \n");

}
void Ext_Init(void)
{
        IT0 = 1;                        //INT0(P3.2)下降沿中断
        EX0 = 1;                        //使能INT0中断

        IT1 = 1;                        //INT1(P3.3)下降沿中断
        EX1 = 1;                        //使能INT1中断
}
void INT0_ISR_Handler() interrupt INT0_VECTOR         
{  
        if(R1 == 0 && !INT_State)   
        {
          key_down_time = system_time;  
          INT_State = 1;
        }  
}

void INT1_ISR_Handler() interrupt INT1_VECTOR   
{  
        if(R2 == 0 && !INT_State)  
        {
          key_down_time = system_time;         
          INT_State = 2;
        }  
}
截图202507251412107739.jpg




回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-7-25 14:18:00 | 显示全部楼层
关于STC8H系列单片机在掉电模式下偶尔无法唤醒的问题,结合您提供的代码和描述,可能存在以下几个关键原因:

1. 中断配置不完整或未正确使能  
   在进入掉电模式前,需确保所有用于唤醒的中断源(如INT0、INT1)已正确配置并启用。若中断配置不完整,可能导致系统无法响应外部事件。

2. 掉电模式设置不正确  
   STC8H系列支持多种低功耗模式,包括空闲模式、停机模式和掉电模式。其中,掉电模式需要配合外部中断或定时器唤醒。若PCON寄存器设置不正确,可能影响唤醒机制。

3. 中断服务函数未正确处理  
   外部中断触发后,需确保中断服务函数能够正常执行,并在退出低功耗模式后恢复系统状态。若中断服务函数存在错误或未返回,可能导致系统无法继续运行。

4. 电源管理与外设配置冲突  
   在进入低功耗模式前,应关闭不必要的外设以降低功耗。若某些外设未正确关闭,可能影响系统的稳定性和唤醒能力。

5. 代码逻辑问题  
   在您的代码中,EnterPowerDown()函数被调用的条件是!KeyLock && !INTState。若该条件判断不准确,可能导致系统在不应进入低功耗模式时误入,从而影响唤醒机制。

建议检查以下几点:
确保所有中断源(INT0、INT1)在进入掉电模式前已正确配置并启用。
检查PCON寄存器的设置是否符合掉电模式的要求。
确保中断服务函数能够正确处理中断事件,并在退出低功耗模式后恢复系统状态。
在进入低功耗模式前,关闭不必要的外设以减少功耗。
仔细检查代码逻辑,确保EnterPowerDown()函数被正确调用。

通过以上调整,可以有效提高系统在掉电模式下的稳定性和唤醒能力。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 2025-7-25 14:32:22 | 显示全部楼层
P32、P33不是直接接按键到GND,进入省电模式时能确保P10、P11、P12、P13是低电平吗?
问题复现时短接P32或P33到GND试一下
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-07-25 14:12:29
已绑定手机

2

主题

3

回帖

24

积分

新手上路

积分
24
发表于 2025-7-25 15:55:41 | 显示全部楼层
Debu*** 发表于 2025-7-25 14:32
P32、P33不是直接接按键到GND,进入省电模式时能确保P10、P11、P12、P13是低电平吗?
问题复现时短接P32或P ...

已解决,把几个printf打印注释掉了。
说明是串口没正常恢复?

点评

printf只是输出字符串到缓冲区,还需要等待串口硬件发送完毕才能进入省电模式  详情 回复 发表于 2025-7-25 16:25
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 2025-7-25 16:25:02 | 显示全部楼层
~ 芯芯*** 发表于 2025-7-25 15:55
已解决,把几个printf打印注释掉了。
说明是串口没正常恢复?

printf只是输出字符串到缓冲区,还需要等待串口硬件发送完毕才能进入省电模式
这是我的程序,Uart_T_Len在发送完毕后会清零,等待Uart_T_Len为0后再进入省电模式
https://www.stcaimcu.com/thread-16321-1-1.html
截图202507251627097145.jpg


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2025-7-25 16:46:27 | 显示全部楼层
截图202507251644018064.jpg


截图202507251645034220.jpg

截图202507251645248318.jpg

截图202507251645512725.jpg

截图202507251646242715.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:464
  • 最近打卡:2025-08-24 00:22:18
已绑定手机

151

主题

1841

回帖

2166

积分

金牌会员

积分
2166
发表于 2025-7-27 20:42:28 | 显示全部楼层
盲猜那个AI_USB.H 里面的两个printf没有取消注释, 导致程序卡死
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 04:10 , Processed in 0.132871 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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