STM8L051之低功耗停机配置问题

在做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在停机之前设置位推挽输出低。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值