首先,我以前用过F103和F407的休眠和唤醒,用着挻好的,但是板子上一堆芯片供着电,所以没具体考虑过将功耗降到最低。前几天在网上搜了一下讨论低功耗的各种帖子、博文。网友的大概意思是要注意以下几点:
1、所有的IO引脚,根据高阻状态的电平配置成上拉输入或下拉输入,意思是降低引脚自身的内部电阻消耗。据说一个电阻约30mA.
2、降低系统时钟频率,这个应该在system_stm32f4xx.c中,通过配置PLL_M、PLL_N、PLL_P、PLL_Q的值,去更改主频。
3、休眠时改用内部晶振,而不再用外部晶振,对于STM32F4来说,应该是要控制PH0 PH1,让它俩变成普通IO,具体的我也没试,至于为什么还没试,请往下看。
4、把jtag引脚配置成普通IO,禁止SWD功能,我也没配置,原因请往下看。
5、使用一些芯片时,看好手册和参考电路,把电路上该有的上拉电阻、下拉电阻给加上。
6、其它方法请坛友们再给加一加。。。
问题在于,我今天测试时非常的奇怪,用自己画的板子跑了一个正点原子的待机唤醒例程,发现休眠后有16mA电流,我认为可以按上面5条来一点一点儿改了,于是去改jtag引脚,配置成普通IO口,发现无论我怎么改,这休眠电流就是不少,反而会有0.1mA的不断上下浮动,不知道为什么会浮动,但肯定与我引脚配置无关。
于是我焊掉板子上的485芯片、232芯片和flash芯片,还剩15mA,又去掉了485芯片部分的两个电阻和小灯上的一个电阻和一个电压转换芯片。这时候休眠电流竟然只剩下了3.6uA。虽说外围电路基本全光光了,只剩下一大堆不工作的电容电阻,但是所有引脚我还都没有配置,怎么就没有电流了呢?
我想起来例程里本身就啥也没配置,于是我又跑了个以前的代码,把待机休眠的三个函数放进去。发现休眠后依然是3.6uA。我这套代码里用了二十几个IO口,什么485、232、TTL、SPI、I2C、单总线、灯、中断全都有。然后我又发现休眠函数里有一句复位所有IO口,我去掉它之后,休眠电流依然是3.6uA。
我现在很蒙逼,不是因为功耗降不下来,而是因为功耗为什么这么低。我还什么都没有配置,没做过低功耗,但很颠覆我以前的认知。我就是感觉现在的测试是有问题的。请问大家几个问题:
1、为什么别人做低功耗废了几天时间去一个引脚一个引脚配,而我这测试直接一步到位呢?原子例程里多写了什么东西吗?休眠后只有3.6uA,虽然手册上说最低2.5uA左右,但毕竟板子做的很随意,3.6已经很满足了。
2、降低系统时钟频率,可以明显降低工作时的功耗,但是休眠后就跟这个频率无关了吗?我不需要在休眠之前把主频调到最低吗?(事实测试是,不管调成啥,功耗都是3.6uA,很颠覆我的认知。)
3、休眠之前的配置了引脚,在休眠之后还会保持原状态吗?比如某IO口引脚芯片给主动拉高了,休眠后它会变成低还是维持高电平?(这个我没测,不大方便测,但是我记得以前写代码是可以保持高电平的)
4、网友说要配置jtag引脚,配成普通IO口,这样能进一步降低功耗,但是原子例程里好像只是复位了一下,理论上等于依然是SWD功能呀。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
因为低功耗调试的难点是如何排除硬件中的漏电流,因为你把外围设备都去掉了,大部分引脚即使默认配置不合理,外部也是悬空的,也不会产生漏电流,你这种测试方法,在实际开发中这种情况没有任何意义,因为产品中必要功能是不能缺失的,如何在保留这些外围器件的情况下,尽可能的降低功耗才是目的,这是涉及器件选型,硬件电路设计,软件调试的综合工程。
至于降低频率,降低的是芯片的运行时功耗,和待机停机功耗是两个概念。你这做工作的相当于测试芯片的待机电流,和低功耗没有任何关系。
一周热门 更多>