要设计一款产品要求功耗在5uA以下,但无论怎么调试,在halt()模式下,最低只达到61~62uA。向各位求教:
STM8L052CTT6,3V供电,只用PC7和PF0两个I/O作中断输入。一个作按键,一个作为计数脉冲。
PCB上有外部晶振,但我用外部晶振时,功耗更高,现在用的是默认的内部高速时钟。
程序如下:
void GPIO_LowPower_Config(void){
GPIO_Init(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 ,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOE, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOF,GPIO_Pin_All ,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init( GPIOF, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7, GPIO_Mode_In_FL_No_IT);
GPIO_Init( GPIOF, GPIO_Pin_1, GPIO_Mode_In_FL_No_IT); //CLK
GPIO_Init( GPIOC, GPIO_Pin_7, GPIO_Mode_In_FL_IT); //KEY
ADC_DeInit(ADC1);
CLK_DeInit();
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM3,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_I2C1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_USART1,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_USART2,DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_USART3,DISABLE);
}
void Halt_Init(void)
{
PWR->CSR2 = 0x2;
LCD_Cmd(DISABLE);
while ((LCD->CR3 & 0x40) != 0x00);
GPIO_LowPower_Config();
CLK_RTCClockConfig(CLK_RTCCLKSource_Off, CLK_RTCCLKDiv_1);
#ifdef USE_LSE
CLK_LSEConfig(CLK_LSE_OFF);
while ((CLK->ECKCR & 0x04) != 0x00);
#else
CLK_LSICmd(DISABLE);
while ((CLK->ICKCR & 0x04) != 0x00);
#endif
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);
}
main(){
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_SYSCLKDivConfig( CLK_SYSCLKDiv_128 );
CLK_ClockSecuritySystemEnable();
Halt_Init();
enableInterrupts();
// disableInterrupts();
halt();
while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>