STM32实现低功耗待机(电流低至5.7uA)
因此在进入STOPMODE之前,需要做:
1、将N.C的GPIO统一配置为IPU/IPD;
2、检查一些Signal的输入Active是High/Low,相应进行配置为IPD/IPU,即避免在内部上/下拉电阻上消耗电流,而且该电流理论值为VCC/R = 3/40 =75uA;
3、如果外部晶振不使用,必须将GPIO配置为IPU/IPD/PPLow,不允许配置为floating,否则会消耗极大的电流 200uA+;
4*、加入进入STOPMODE前,不允许将PWR的CLK关闭,这部分牵涉低功耗模式,实际测试关闭能用,也能唤醒,但是电流会增加10uA+;
5、配置GPIO为输出时,根据输出的常态选择上拉/下拉,如闲置输出为0,则配置为下拉,输出闲置为1,则配置上拉;
6、另外特别说明的是->从Stopmode唤醒后,系统会自动切换到HSI,如果进入前使用的是外部晶振/PLL(PLL的clksource = HSI/HSE)因此必须调用System_Init(),对RCC重新初始化,否则唤醒后主频发生改变,会影响系统;
调试经验分享:
经常在移植新的产品方案时,都会遇到待机电流不能一步到位,需要测试、调试的过程,在此分享一个土办法。
1、在调用EnterStopmode前,将GPIO的所有配置寄存器printf,比对GPIO的初始化表,看是否在进入STOP前,在其他地方对GPIO配置做了改动;
调试过程告诉我,基本都是在进入stopmode时,其他的GPIO被另外配置错误导致;
2、在调用EnterStopmode前,将GPIO的所有配置全部重新配置一次,也可以快速的检验是否是这个环节出问题。
以上转自:http://www.51hei.com/mcu/2758.html
参考:http://bbs.21ic.com/icview-558242-1-1.html
具体要点为:
1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。这个很多人都提到过,必须的。作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了
2、两个晶振输入脚要remap成普通IO!!!使用内部晶振。
3、pwr的时钟要使能,即RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);这个也相当重要
4、关闭jtag口,并设成普通IO;
5、注意助焊膏的质量!!!注意电路板层之间是否进水!!!!
掌握这几项要点,再设中断什么的都行,整个世界清静了!!!完全低能耗。
有些误导的地方,下面2点对于STANDBY模式不是必需的:
2、两个晶振输入脚要remap成普通IO!!!使用内部晶振。
4、关闭jtag口,并设成普通IO;