本帖最后由 tangweichen 于 2019-12-6 16:08 编辑
公司开发低功耗项目时看中了华大这款HC32L130F8UA产品,向供应商拿了些样品,写了一个简单程序测试,测试过程中发现了一个奇怪的现象,当进入深度休眠模式,功耗会降到2个uA,维持个几秒的样子马上就会反弹到1个mA,不知道问题出在哪里,请知道详情的人给个指点,在此感谢了!
下面为简单的测试代码
//*****************************************************************************
int32_t main(void)
{
delay1ms(5*1000);
while (1) GotoLpmMode();
}
/*******************************************************************************
* 进入休眠模式
******************************************************************************/
void GotoLpmMode(void)
{
//Lpm Cfg
stc_lpm_config_t stcLpmCfg;
stcLpmCfg.enSEVONPEND = Se***dDisable;
stcLpmCfg.enSLEEPDEEP = SlpDpEnable; //使能:执行WFI进入深度休眠;
stcLpmCfg.enSLEEPONEXIT = SlpExtDisable; //不使能使能:退出异常处理并返回时,处理器自动进入休眠模式的特性禁止.
Lpm_Config(&stcLpmCfg);
Lpm_GotoLpmMode();
}
解决方案:
//*****************************************************************************
static void _LowPowerModeGpioSet(void)
{
//Demo板所有低功耗模式不使用的IO配置为输出
M0P_GPIO->PAADS = 0x0000;
M0P_GPIO->PBADS = 0x0000;
M0P_GPIO->PCADS = 0x0000;
M0P_GPIO->PDADS = 0x00;
M0P_GPIO->PADIR = 0x0000;
M0P_GPIO->PBDIR = 0x0000;
M0P_GPIO->PCDIR = 0x0000;
M0P_GPIO->PDDIR = 0x00;
//Demo所有低功耗模式下不使用的IO输出低电平
M0P_GPIO->PAOUT = 0x0000;
M0P_GPIO->PBOUT = 0x0000;
M0P_GPIO->PCOUT = 0x0000;
M0P_GPIO->PDOUT = 0x00;
}
感谢 martinhu 的帮忙,问题已经解决!
在进入休眠模式之前,需要把未使用到的IO口置为输出低电平,此时功耗会稳定在2uA,不会存在反弹的情况。
不然会出现我描述的那种情况,低功耗只能维持个几秒就会反弹到mA级别。上述为我测试这款HC32L130F8UA产品的情况。希望对遇到这种情况的坛友有所帮助,最后还是要感谢下martinhu 的帮助。
|