历史上的今天
今天是:2024年11月20日(星期三)
2019年11月20日 | STM8L051之低功耗停机配置问题
2019-11-20 来源:eefocus
在做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在停机之前设置位推挽输出低。
史海拾趣
|
最近在学Ardence RTX实时系统软件,有很多不懂的地方,下面是一个定时器程序,不太明白? 最近在学Ardence RTX实时系统软件,有很多不懂的地方,下面是一个定时器程序,不太明白?请路过大虾们帮忙看看。 下面是源代码,包括两个文件,一个头文件,一个源文件。如下所示: /////////////////////////////////////////////////////// ...… 查看全部问答> |
|
wince emulator使用时出现错误:Cannot launch the remote executable error:Unknown error. Win32 error code:126 提示我路径有问题,但路径如何设?我这里download directory已经设为\\ 还应该更改哪里,求教.… 查看全部问答> |
|
各位大侠,我用51单片机的串口接收数据 在开始的几秒内接收是正确的,可是过一会就接收不正确了,为甚呢?? 串口以9600的波特率一直在接收数据,是不是接收时间长波特率就乱了? void serial() interrupt 4 using 1 { &n ...… 查看全部问答> |
|
用定时器做了个闪灯程序,定时器定时中断产生,进入中断服务程序,完成后却RETI到程序第一句处,这是为什么,就像按了RESET一样的效果… 查看全部问答> |




