jnyyz 发表于 2023-4-10 17:01:56

关于STC8H8K64U单片机休眠电流问题,请高手解答。

本帖最后由 jnyyz 于 2023-4-10 17:34 编辑

STC8H8K64U休眠电流不稳定,有时会是0.56uA(正常值),有时是1.7uA左右,同样的程序,同样的硬件,就是飘忽不定,这次加电好了,下次可能又成了1.7uA,差1.14uA电流始终没有找到问题点。初始化代码如下:

#define GpsPowerOn()         MGRxd=1;MGTxd=1;GpsPower=0;//FLAGGpsStart=1;                                       
#define GpsPowerOff()      GpsPower =1;MGRxd=0;MGTxd=0;//FLAGGpsStart=0;
#define Uart3On()                        IE2 |= 0x08;
#define Uart3Off()                        IE2 &= ~0x08;
#define GpsBatOn()         GpsBat=1;
#define GpsBatOff()         GpsBat=0;
#define LeanPowerOff()      SSLeanPower=0;
#define LeanPowerOn()      SSLeanPower=1;
#define LedOff() LEDKey=0;
#define LedOn()                if(FLAGSetStatus) LEDKey=0;
#define GyroPowerOff()   GyroPower=0;GyroSDA=0;GyroSCL=0;
#define GyroPowerOn()   GyroSDA=1;GyroSCL=1;GyroPower=1;
#define Int0On()                     EX0 = 1;
#define Int0Off()                     EX0 = 0;
#define FlowPowerOff()         FlowPower=1;P3M1&=~0x04;ReadFlowKey=0;P0M1&=~0x10;TestFlowSen=0;
#define FlowPowerOn()         FlowPower=0;P3M1|=0x04;ReadFlowKey=1;P0M1|=0x10;TestFlowSen=1;
#define VoicePowerOn()         VoiceCtrl=1;VoicePower=0;FlagVoiceBusy=1;//WHSecIntOn |= 0x02;
#define VoicePowerOff()         VoicePower=1;VoiceCtrl=0;FlagVoiceBusy=0;//WHSecIntOn &= ~0x02;

#define BluePowerOn()          BlueTx=1;BlueRx=1;BlueSta = 1;BluePower = 0;WHFlagBlueStatus=1;                //Ê×ÏÈ¿ªÆôÃëÖжϣ¬µ¹¼ÆÊ±60Ã룬ûÓÐÁ¬½ÓÔò¹Ø¶ÏÀ¶ÑÀ
#define BluePowerOff()        BluePower = 1;BlueTx=0;BlueRx=0;BlueSta = 0;WHFlagBlueStatus=0;               
#define UltraOn()                                P30Key=1;P31Key=1;WHFlagUltraStatus=1;
#define UltraOff()                        P30Key=0;P31Key=0;WHFlagUltraStatus=0;
#define VYL_On()                                YLPower=0;
#define VYL_Off()                                YLPower=1;
#define VTemp_On()                         TPPower=1;
#define VTemp_Off()                 TPPower=0;

sbit      VoicePower= P2^0;               
sbit      VoiceCtrl      = P0^6;               
sbit      VGPWROn         = P4^4;               
sbit      VGPWROn2         = P4^3;               
sbit      MRxd                        = P1^0;               
sbit      MTxd                        = P1^1;         
sbit      LEDKey                = P4^5;               
sbit      YLPower         = P4^0;               
sbit         ReadPressKey= P1^3;      
sbit      FlowPower      =P5^1;               
sbit      HYDSoakingKey=P5^4;      
sbit         ReadFlowKey=P3^2;               
sbit      TestFlowSen=P0^4;               
sbit      BluePower      = P2^1;               
sbit      BlueSta                = P4^1;               
sbit      BlueTx                = P0^2;               
sbit      BlueRx                = P0^3;               
sbit      GpsPower      = P5^0;               
sbit      MGRxd                        = P0^0;               
sbit      MGTxd                        = P0^1;               
sbit         GpsBat                = P4^7;               
sbit      CAPKey               = P3^3;               
sbit      ReadTap         = P3^6;               
sbit      ReadImpKey= P3^7;               
sbit      FMQOUTKey      = P0^7;               
sbit      SSLeanPower=P3^4;               
sbit      ReadLean         = P3^5;               
sbit      SoakingKey= P4^2;         
sbit      GyroPower = P4^6;               
sbit      GyroSDA                = P1^4;
sbit      GyroSCL                = P1^5;
sbit      TPPower                = P5^3;               
sbit      TPAdc               = P0^5;         
sbit         Cry1                        = P1^6;
sbit         Cry2                        = P1^7;
sbit      P30Key                = P3^0;               
sbit      P31Key                = P3^1;

void VG_On()                                                                                
{
        MRxd=1;
        MTxd=1;
        VGPWROn=0;
        Delay(20);
        VGPWROn2=0;
}

void VG_Off()                                                                                
{
        VGPWROn2=1;
        Delay(20);
        VGPWROn=1;
        MRxd=0;
        MTxd=0;
}            

void SYSParaInit()
{
                P0M0 = 0x40;
                P1M0 = 0x00;
                P2M0 = 0x00;
                P3M0 = 0x10;
                P4M0 = 0x40;
                P5M0 = 0x08;
                P0M1 = 0x30;
                P1M1 = 0x08;
                P2M1 = 0x00;
                P3M1 = 0x68;
                P4M1 = 0x04;
                P5M1 = 0x10;
                P_SW2 |= 0x80;
                ADCCFG = 0x2F;
                INTCLKO |= 0x10;                           
                UartInit();                                                                              
                UltraOn();
                Delay(5);
                EA = 1;                                                                                                
}

void SYSAwait()
{
                         LedOff();                                                      
                        LeanPowerOff();                              
                        GpsPowerOff();                              
                        GpsBatOff();                                       
                        GyroPowerOff();                              
                        BluePowerOff();                              
                        FlowPowerOff();                              
                        VoicePowerOff();                        
                        VG_Off();                                                      
                        VTemp_Off();                                       
                        SendString1("Sys ready to factory sleep!\r\n");
                        Delay(20);
                        UltraOff();
                        while(1)
                        {
                              PCON = 0x02; //MCUµôµçÐÝÃß                              
                              NOP(10);
                              if(TurnCou>=3)                                                      
                              {
                                        TurnCou=0;
                                        FLAGTap=0;
                                        IapProgramByte(IAP_PWR_ADDR,0xAA);
                                        break;
                              }
                        }

                        
                        IT0 = 1;                           
                        EX0 = 1;                           
               
                        IT1 = 0;                           
                        EX1 = 1;                           
                        INTCLKO |= 0x20;                                       
                        P1IE=0x3F;
                        P1M1|=0xC0;
                        X32KCR =0xC0;                              
                        while(!(X32KCR&0x01));
                        RTCCFG&=~0x02;                              
                        FlowPowerOn();
                        if(SysCurPara.OthSetUltraOn==1)
                        {
                              UltraOn();
                        }
                        BluePowerOn();
                        Delay(10);
                        ReadSysID();
                        SysIDJudge();
}      



main()
{
SYSParaInit();
SYSAwait();

}


神农鼎 发表于 2023-4-10 18:00:23

原理图的PDF, 芯片的表面图片发上来
页: [1]
查看完整版本: 关于STC8H8K64U单片机休眠电流问题,请高手解答。