目前做的一块L071的板子,把外设基本都拆了,留了两个晶振,一个电池稳压芯片.进入stop+rtc之前,关了中断,默认初始化,把IO全设为无上下拉模拟,ADC、SPI和I2c的引脚改为无上下拉输出,并输出0。外设去使能。关闭全部外设的时钟。
从电池供电口串电流表测量的时候,低功耗模式一直是400ua,有没有大佬支个招。
附上我进低功耗之前的处理函数。
[mw_shl_code=c,true]void my_lp()
{
LL_GPIO_InitTypeDef GPIO_InitStructure;
NVIC_DisableIRQ(TIM2_IRQn);
NVIC_DisableIRQ(EXTI2_3_IRQn);
NVIC_DisableIRQ(EXTI0_1_IRQn);
NVIC_DisableIRQ(RCC_IRQn);
LL_GPIO_DeInit(GPIOA);
LL_GPIO_DeInit(GPIOB);
LL_GPIO_DeInit(GPIOC);
LL_ADC_DeInit(ADC1);
LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA|LL_IOP_GRP1_PERIPH_GPIOB|LL_IOP_GRP1_PERIPH_GPIOC);
GPIO_InitStructure.Pin= GPIO_PIN_All;
GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_LOW;
GPIO_InitStructure.Mode= GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOA, &GPIO_InitStructure);
LL_GPIO_Init(GPIOB, &GPIO_InitStructure);
LL_GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.Pin= GPIO_PIN_15;
GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode= GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.Pin= GPIO_PIN_0;
GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.Pin= GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.Pin= GPIO_PIN_9;
GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_OD;
GPIO_InitStructure.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOA, &GPIO_InitStructure);
// spi io A4 A5 A6 A7
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_4, LL_GPIO_MODE_ANALOG);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_4, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_4, LL_GPIO_PULL_NO);
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_ANALOG);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_5, LL_GPIO_PULL_NO);
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_6, LL_GPIO_MODE_ANALOG);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_7, LL_GPIO_MODE_ANALOG);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_7, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_7, LL_GPIO_PULL_NO);
// adc io A2
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_2, LL_GPIO_MODE_ANALOG);
LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_2, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_2, LL_GPIO_PULL_NO);
LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8|LL_GPIO_PIN_9|LL_GPIO_PIN_11|LL_GPIO_PIN_12);
LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_14|LL_GPIO_PIN_15);
LL_IOP_GRP1_DisableClock(LL_IOP_GRP1_PERIPH_ALL);
LL_APB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_ALL);
LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_ALL);
LL_USART_Disable(USART1);
LL_SPI_Disable(SPI1);
LL_I2C_Disable(I2C3);
LL_ADC_Disable(ADC1);
LL_TIM_DisableCounter(TIM2);
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我把外设的供电去掉了。单片机的所有IO口,在低功耗库函数里全部配成模拟无上下拉了。
这样的话是不是可以认为IO口上岂不是就没有电流消耗了?
多余的功耗可能是你DCDC的功耗,可以看着买几个贵点低功耗点的DCDC试试。
另外ADC的功耗I=U/R提高电阻阻值到M级这个损耗就能小到可以忽略了,试下L071的AD管脚如果在M级电阻下还能采到正确电压那直接用这个就是了,省事
没有接仿真器,用电池供的电,然后手工不好焊,我就把板子拆到只剩MCU和按键什么的,再加上DCDC了。
请问如果用3.6V电池直接供给单片机,会不会电压不稳定,或者导致测量低功耗不准什么的。(手册上说的供电在1.65-3.6V)
后面改硬件再换大电阻,目前我把上拉的R28拆掉了。然后配置成PPout,down,输出0。这样应该没电流了吧,
然后问下12M晶振的俩引脚怎么处理比较好,我做成PPout,down,输出0,并没什么改善。晶振这部分进STOP的时候会耗电吗
一周热门 更多>