xiao_H 发表于 2025-6-18 11:46:26

低功耗异常,找不出问题

STC8G1K08A进入掉电模式异常,
当我烧写一个什么都没有的空程序进去测得功耗8ma,
然后自己的程序写入代码按条件掉电仍然还有8ma电流,
把芯片吹下来,只测板子电流是60ua,装上芯片就是8ma,
不管开没开睡眠,找不出原因,请教各位工程师们,
第一次使用这个芯片不太了解

ercircle 发表于 2025-6-18 13:12:51

用AIAPP-ISP软件上例程测下:
#include "reg51.h"
#include "intrins.h"

#define IDL             0x01                  //PCON.0
#define PD            0x02                  //PCON.1
sbit    P34         =   P3^4;
sbit    P35         =   P3^5;

sfr   P0M1      =   0x93;
sfr   P0M0      =   0x94;
sfr   P1M1      =   0x91;
sfr   P1M0      =   0x92;
sfr   P2M1      =   0x95;
sfr   P2M0      =   0x96;
sfr   P3M1      =   0xb1;
sfr   P3M0      =   0xb2;
sfr   P4M1      =   0xb3;
sfr   P4M0      =   0xb4;
sfr   P5M1      =   0xc9;
sfr   P5M0      =   0xca;

void INT0_Isr() interrupt 0
{
    P34 = ~P34;                                 //测试端口
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    EX0 = 1;                                    //使能INT0中断,用于唤醒MCU
    EA = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
//    PCON = IDL;                                 //MCU进入IDLE模式
    PCON = PD;                                  //MCU进入掉电模式
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    P35 = 0;

    while (1);
}

xiao_H 发表于 2025-6-18 13:52:46

ercircle 发表于 2025-6-18 13:12
用AIAPP-ISP软件上例程测下:

这个程序我试过,虽然还有200多ua电流,但感觉应该是进去掉电模式,自己的代码里面不知道为什么进不去,感觉掉电模式就PCON=0x02;这个简单指令啊,为什么会进不去想不明白

ercircle 发表于 2025-6-18 14:34:32

xiao_H 发表于 2025-6-18 13:52
这个程序我试过,虽然还有200多ua电流,但感觉应该是进去掉电模式,自己的代码里面不知道为什么进不去, ...

把阻挡进入掉电模式的判断条件逐个改成1看是哪个影响的。
进去后加个翻转IO观察下
是不是外部一直在唤醒

神农鼎 发表于 2025-6-18 15:02:03



【新提醒】省电模式,I/O口如何设置才省电,进入主时钟停振/省电模式前 - 电源/复位/省电模式/外部晶振/内部时钟/对外时钟输出/PLL-144MHz时钟 国芯技术交流网站 - AI32位8051交流社区




DebugLab 发表于 2025-6-18 15:05:26

中断唤醒,检查一下外部输入的信号是否有抖动,接按键的话需要检测按下消抖检测释放再消抖后然后进入省电模式

ercircle 发表于 2025-6-18 15:20:36

用擎天柱测试可能有一堆电阻在漏电流,换最小系统板就干净了,1uA:
813
#include "Ai8051U.h"
#include "intrins.h"
void Delay100ms(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 599998UL;
        while (i) i--;
}
void INT0_Isr() interrupt 0{

}

void main()
{
                P_SW2=0x80;WTST = 0;CKCON = 0;
                P0M0 = 0x00; P0M1 = 0xff;P0IE = 0x00;
                P1M0 = 0x00; P1M1 = 0xff;P1IE = 0x00;
                P2M0 = 0x00; P2M1 = 0xff;P2IE = 0x00;
                P3M0 = 0x00; P3M1 = 0xff;P3IE = 0x00;
                P4M0 = 0x00; P4M1 = 0xff;P4IE = 0x00;
                P5M0 = 0x00; P5M1 = 0xff;P5IE = 0x00;
                P6M0 = 0x00; P6M1 = 0xff;P6IE = 0x00;
                P7M0 = 0x00; P7M1 = 0xff;P7IE = 0x00;
    IRCDB = 0x10;
    P3M0 = 0x00; P3M1 = 0xf3; P3IE = 0x0c;   //P32 P33准双向,打开数字输入
    P2M0 = 0x00; P2M1 = 0x00; //P2准双向
                IT0 = 1;
    EX0 = 1;                                    //使能INT0中断,用于唤醒MCU
    EA = 1;
   
               P2 = 0x0F;      
    while (1){
                        if(!P33){
                              Delay100ms();
                              if(!P33){
                                                                                                                                                                P2 = 0XFF;
                                        //P20 = 1;
                                       _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                        //    PCON = IDL;                                 //MCU进入IDLE模式
                                                                                                                                                                //PCON = PD;                                  //MCU进入掉电模式
                                                                                                                                                                PD = 1;
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                                                                                                                                                _nop_();
                                        P20 = 0;
                              }
                        }
               
                };
}

xiao_H 发表于 2025-6-18 15:32:55

DebugLab 发表于 2025-6-18 15:05
中断唤醒,检查一下外部输入的信号是否有抖动,接按键的话需要检测按下消抖检测释放再消抖后然后进入省电模 ...

是进行消抖过的,我用的定时器扫描按键,判断按键按下设置标志位,睡眠标志位=0时;执行相应配置然后进入掉电

DebugLab 发表于 2025-6-18 15:39:48

xiao_H 发表于 2025-6-18 15:32
是进行消抖过的,我用的定时器扫描按键,判断按键按下设置标志位,睡眠标志位=0时;执行相应配置然后进入 ...

松开时也会抖动,由于此时是外部中断硬件唤醒,无法软件消抖

DebugLab 发表于 2025-6-18 15:41:47

所以必须松开再消抖,之后再进入省电模式
页: [1] 2
查看完整版本: 低功耗异常,找不出问题