找回密码
 立即注册
查看: 989|回复: 1

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

[复制链接]

8

主题

10

回帖

68

积分

注册会员

积分
68
发表于 2023-4-10 17:01:56 | 显示全部楼层 |阅读模式
本帖最后由 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();

}


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2023-4-10 18:00:23 | 显示全部楼层
原理图的PDF, 芯片的表面图片发上来
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 15:37 , Processed in 0.127744 second(s), 51 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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