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);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-20 02:05
 精彩回答 2  元偷偷看……
xiaoyu
2楼-- · 2019-07-20 04:19
关闭HSI时钟,开启LSI时钟
qhwan_love
3楼-- · 2019-07-20 09:31
IO口要根据实际应用配置成功耗最低的方式
lpx280666373
4楼-- · 2019-07-20 11:40
 精彩回答 2  元偷偷看……
Dylan Hayden
5楼-- · 2019-07-20 17:04
IO 口状态可以多试试,你用的是低电压模式,我之前用的是halt模式,最低3uA。IO口不接电路的话实测GPIO_Mode_Out_OD_Low_Slow是最低的。其他IO状态都要高很多。
wenlong0601
6楼-- · 2019-07-20 20:03
IO 口状态要置0。然后你再测测,功耗会低的。

一周热门 更多>