OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8196|回复: 9
打印 上一主题 下一主题

STM8L052C6T6低功耗问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-12-21
在线时间
0 小时
跳转到指定楼层
楼主
发表于 2015-12-21 10:28:42 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
5金钱
要设计一款产品要求功耗在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);
}


回复

使用道具 举报

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

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-12-18 21:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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