×
单片机 > 单片机程序设计 > 详情

STM8L051之低功耗停机配置问题

发布时间:2020-05-22 发布时间:
|

在做stm8L的小一个项目,由电池供电,当按键长按关机,系统进入 

停机模式,虽然系统运行的时候有十几毫安的电流消耗(还没使用RTC 

定时唤醒),但是在停机模式下电流消耗竟然还有1.33ma的电流,花了 

半天的时间找资料,看文档,在网上看到不少大牛能做到0.4ua,自己 

无论如何设置IO,外设都无补于事,停机模式下电流最低还有1ma。 

最后只能将开机初始化的外设函数一个一个注释掉,包括ADC, 

DMA,beep,以及TIM4,最后发现只注释掉ADC的初始化函数,再进入停机模式,果然电流接近0,5ua,也就是说可能ADC模块在进入停机模式前的关闭设置不正确,之前的是这样的:


void PerCLK_OFF()


  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE);

  ADC_DeInit(ADC1);

  CLK_PeripheralClockConfig(CLK_Peripheral_RTC,DISABLE);

  RTC_DeInit();

  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1,DISABLE);

  DMA_DeInit(DMA1_Channel0);

  CLK_PeripheralClockConfig(CLK_Peripheral_BEEP,DISABLE);

  BEEP_DeInit();

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,DISABLE);

  TIM4_DeInit();

}  

修改之后是这样的:


void PerCLK_OFF() 

ADC_DeInit(ADC1); 

CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE); 

RTC_DeInit(); 

CLK_PeripheralClockConfig(CLK_Peripheral_RTC,DISABLE); 

DMA_DeInit(DMA1_Channel0); 

CLK_PeripheralClockConfig(CLK_Peripheral_DMA1,DISABLE); 

BEEP_DeInit(); 

CLK_PeripheralClockConfig(CLK_Peripheral_BEEP,DISABLE); 

TIM4_DeInit(); 

CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,DISABLE);


“`


也就是将外设寄存器恢复初始值之前,不能关闭外设时钟,等到外设寄存 

器初始化之后,关闭外设时钟,模块才能关闭。原因这里先不做深究,先把 

项目完成再说。 

另外IO在停机之前设置位推挽输出低。


关键字:STM8L051  低功耗  停机配置 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析