关于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();
}
原理图的PDF, 芯片的表面图片发上来
页:
[1]