STM32 进入Stop模式后电流还是很大怎么办?
STM32 进入停止模式后电流还是很大,可能椒几百个uA,怎么办?
通常做法有如下几点:
- MCU外围管脚配置
- 检查外围有无闭合回路
- SWDIO,SWCLK 管脚
- 设备运行时的外设功能,逐一关闭。
1. MCU外围管脚配置
要将MCU外围管脚配置一番,那如何配置呢,特别是嵌入式的软件工程师,因为对硬件电路不太熟悉,往往会感到疲惫感,调试了一整天,电流还是下不来,这怎么办才好呢?
不妨我们从头开始梳理。
STM32的GPIO工作方式
GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出)。
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
关于八种模式的详细介绍,论坛里大牛已经给出:https://blog.csdn.net/qq_38410730/article/details/79858906
这里就联相信展开了。
在进入Stop模式时候,通常是设置成为输入模式。
根据设备原理图查看IO外部引脚连接电路,
- 如果闲置状态为悬空,设置为模拟输入;
- 如果闲置状态为低电平,设置为下拉输入;
- 如果闲置状态为高电平,设置为上拉输入;
原因:
当悬空时,斯密特触发器是打开的,要判断输入的是高电平还是低电平,需要一点电流损耗,但是设备模拟输入,这个触发器是关闭的
当IO通过外围电路电阻接地被拉低时,如果设置为上拉输入,则在芯片内部的上拉电阻和外围的下拉电阻构成回路,电流损耗取决于这两个电阻;
当IO通过外围电路电阻接电源被拉高时,则在芯片内部的下拉电阻和外围的上拉电阻构成回路,电流损耗也取决于这两个电阻;
2. 检查外围有无闭合回路
排查外围电路,某些驱动、电源转换IC如果是由软件使能,如果进入停止模式之后不需要则关闭,因为本身就有工作电流;如果是由硬件使能,则需要查看芯片手册看静态工作电流是多少,如果比较高,只能修改硬件电路或者用低耗ic代替。
外围是否有一些闭合回路,比如电压采集,虽然ADC已经关闭,但是这个分压电路还是有损耗的,大小一般取决于电阻和电源电压。
3、SWDIO,SWCLK 管脚
另外如果在线调试时,进入停止模式后,调试失去作用,看看是不是SWDIO、SWCLK两个引脚也直接设置成了模拟输入,还关闭了调试功能:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
4、设备运行时的外设功能,逐一关闭。
设备运行时开启的外设功能,视情况关闭,可以依次关闭看电流减小情况,并和数据手册做对比(要先关功能,再失能对应外设时钟,否则会关闭不成功,会有电流损耗。