STM8l 進入低功耗之前配置

在做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();
}  
修改之後是這樣的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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在停機之前設置位推輓輸出低。
--------------------- 
作者:bd7iow 
來源:CSDN 
原文:https://blog.csdn.net/bd7iow/article/details/56851157 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章