Tengo un proyecto en el que estoy tratando de reducir el consumo de energía lo más posible (en un STM32F103RCT6).
Miré el documento de ST sobre cómo reducir al mínimo el consumo de energía del STM32F2 y traté de seguir sus recomendaciones:
- Configuración de todos los pines no utilizados en AIN
- Desactivar los ADC
- apaga el USB
- utilizando PWR_EnterSTOPMode (PWR_Regulator_LowPower, PWR_STOPEntry_WFE); ir en el modo STOP mientras se puede despertar con EXTI
Lo cierto es que el consumo de energía sigue siendo de 4,6 mA (en comparación con 15 en el modo estándar de suspensión de WFI, y alrededor de 30 cuando realmente estamos haciendo cosas). Las hojas de datos parecen sugerir que el consumo de energía en STOP debería estar por debajo de 0,5 mA.
He puesto un alcance en el oscilador externo y eso realmente se detiene.
¿Hay algo obvio que me esté perdiendo? ¿Hay alguna forma de que compruebe qué podría estar causando el consumo de energía adicional?
ACTUALIZACIÓN : se me ocurrió un programa de prueba muy simple, derivado del código de ejemplo de ST:
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOE, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE, DISABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
while (1) PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}
El consumo de energía con esto sigue siendo 4.3mA. También he comprobado el circuito: es REALMENTE básico y he medido el voltaje en cada resistencia (y es cero).
¿Alguna idea? ¡Actualmente estoy pensando que en realidad es el regulador de voltaje LD1117 el que tiene la culpa!