这两天在调stm8s003的halt模式。
需求非常简单,什么外设都不要,上电进入省电模式,3s钟后醒来输出几个低电平。然后再进入省电模式,再3s后醒过来。。。。循环。
电路也很简单,什么外围器件也没有(原理图上的LED已经拆掉)。
本以为把stm8的功耗管理笔记.pdf读一遍就搞定的事,调了3个晚上了,一直顽固的在3mA以上不下去。
但是我现在怎么调,进入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低功耗这块研究过的哥们,给点建议,实在是头疼。
问题解决之后我会把问题解决步骤整理一下发上来的。
你可以看看这个帖子
一周热门 更多>