STM8L052C6T6低功耗问题

2019-07-19 21:11发布

要设计一款产品要求功耗在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);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。