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

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

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

2

主题

3

回帖

24

积分

新手上路

积分
24
发表于 7 天前 | 显示全部楼层 |阅读模式
请教一下大家,做了个按键矩阵(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

主题

2105

回帖

1058

积分

等待验证会员

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

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

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

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

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

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

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

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

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

使用道具 举报 送花

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

87

主题

5791

回帖

1万

积分

超级版主

DebugLab

积分
10398
发表于 7 天前 | 显示全部楼层
P32、P33不是直接接按键到GND,进入省电模式时能确保P10、P11、P12、P13是低电平吗?
问题复现时短接P32或P33到GND试一下
DebugLab
回复 支持 反对

使用道具 举报 送花

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

2

主题

3

回帖

24

积分

新手上路

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

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

点评

printf只是输出字符串到缓冲区,还需要等待串口硬件发送完毕才能进入省电模式  详情 回复 发表于 7 天前
回复 支持 反对

使用道具 举报 送花

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

87

主题

5791

回帖

1万

积分

超级版主

DebugLab

积分
10398
发表于 7 天前 | 显示全部楼层
~ 芯芯*** 发表于 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


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-08-01 10:06:57

762

主题

1万

回帖

1万

积分

管理员

积分
18316
发表于 7 天前 | 显示全部楼层
截图202507251644018064.jpg


截图202507251645034220.jpg

截图202507251645248318.jpg

截图202507251645512725.jpg

截图202507251646242715.jpg
回复 支持 反对

使用道具 举报 送花

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

149

主题

1788

回帖

3002

积分

论坛元老

积分
3002
发表于 5 天前 | 显示全部楼层
盲猜那个AI_USB.H 里面的两个printf没有取消注释, 导致程序卡死
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 20:22 , Processed in 0.124764 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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