stm8s003 活跃停机状态的电流始终在3mA以上。和官方宣称的9uA相差了300倍。

2019-07-21 08:52发布

这两天在调stm8s003的halt模式。

需求非常简单,什么外设都不要,上电进入省电模式,3s钟后醒来输出几个低电平。然后再进入省电模式,再3s后醒过来。。。。循环。
电路也很简单,什么外围器件也没有(原理图上的LED已经拆掉)。
本以为把stm8的功耗管理笔记.pdf读一遍就搞定的事,调了3个晚上了,一直顽固的在3mA以上不下去。

捕获.PNG




但是我现在怎么调,进入halt之后都有3mA以上的电流。
网上查了很久也没搞懂为什么。

测电流的方式用了两种
1、直接串联电流表
2、接了一个50欧姆小电阻,测压降
两种方法测出来结果基本一致


做了几个实验:
上电直接进入halt模式,
大约是4mA多。

如果上电先
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);           //设置内部高速时钟16M为主时钟  没用晶振

电流会上去1mA多。

然后再进入halt。
再进入halt前,我在网上查了很久,做了一堆操作,感觉没什么效果。

1.把所有的引脚设置为浮空输入
  AllPinsFlIn();
2.关闭MVR
CLK_SlowActiveHaltWakeUpCmd(ENABLE);                //关闭主稳压器MVR,低功率稳压器LPVR启动
3.切换到LSI
    CLK_LSICmd(ENABLE);                                                          //启动LSI
    CLK_ClockSwitchCmd(ENABLE);                                        //启用时钟切换
        CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_LSI,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE); //切换LSI,并关闭HSI
        CLK_HSICmd(DISABLE);

4.关闭快速唤醒
        CLK_FastHaltWakeUpCmd(DISABLE);                                        //关闭快速唤醒
5.关闭所有的设备,只保留了AWU做唤醒
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C,DISABLE);       
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,DISABLE);       
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART2,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART3,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER6,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER5,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER3,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC,DISABLE);
        CLK_PeripheralClockConfig(CLK_PERIPHERAL_CAN,DISABLE);

6、设置FLASH到低功率模式
       FLASH_SetLowPowerMode(FLASH_LPMODE_POWERDOWN);       

我感觉我做的挺全面了,网上提到的点我都做了,为啥大家都是uA级别,就我在mA级别下不去。晕。



遇到几个问题:
1.我做完第三步的时候,用CLK_GetSYSCLKSource去验证,发现当前始终还是HSI。
2.第一步和第五步都有轻微的电流减小,其他几步感觉没啥变化。


请教一位在halt低功耗这块研究过的哥们,给点建议,实在是头疼。

问题解决之后我会把问题解决步骤整理一下发上来的。








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。