Перейти к содержанию
    

stm32l100 discovery, standby mode

Всем привет.

 

Работаю с отладочной платой STM32L100 Discovery. Хочу добиться заявленного потребления ~0.3 uA в режиме standby. Делаю все как в примере для библиотеки Standard Peripheral Library с сайта ST, пример Current consumption из папки PWR для замера потребляемого тока. В итоге получаю потребление в этом режиме ~275uA. Ток меряю на выводах Idd на плате. Бьюсь уже довольно давно, много чего перепробовал, но меньшего значения, чем в том коде что идет ниже, добиться не удалось. Что я могу делать не так? Помогите, кто сталкивался. На всякий случай прилагаю еще принципиалку платы и библиотечный пример.

GPIO_InitTypeDef GPIO_InitStructure;

int main(void)
{
 /* Enable PWR APB1 Clock */
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

 /* Allow access to RTC */
 PWR_RTCAccessCmd(ENABLE);

 /* Reset RTC Domain */
 RCC_RTCResetCmd(ENABLE);
 RCC_RTCResetCmd(DISABLE);

 /*  Configure Key Button*/
 /* Enable the BUTTON Clock */
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

 /* Configure Button pin as input */
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 /* Wait Until Key button pressed */
 while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) == RESET)
 {
 }
 /* Wait Until Key button pressed */
 while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) != RESET)
 {
 }

 /* Enable Ultra low power mode */
 PWR_UltraLowPowerCmd(ENABLE);

 /* Clear PWR WakeUp flag */
 PWR_ClearFlag(PWR_FLAG_WU);

 /* Enable WKUP pin 1 */
 PWR_WakeUpPinCmd(PWR_WakeUpPin_1, ENABLE);

 /* Request to enter STANDBY mode */
 PWR_EnterSTANDBYMode();
 while(1){}
}

CurrentConsumption.rar

disco.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще можно обратить внимание на неиспользуемые выводы. После включения питания они настроены на ввод без подтяжек, при этом под воздействием наводок и утечек потенциал на них стремится к половине питания, что приводит к протеканию сквозных токов во входных каскадах. Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку. Также стоит помнить о том, что в корпуса с разным количеством выводов пакуются одни и те же кристаллы и если в вашем корпусе нет, скажем, ноги PC7 - это не значит, что входных цепей этой ноги нет на кристалле. То есть требование перевести на выход и вывести ноль относится и к этой ноге тоже. Но бывают и обратные ситуации - если какого-то порта в данном корпусе нет целиком, то его может не быть и на кристалле. Тогда попытка записи в этот порт приведет к вылету в исключение и трогать этот порт не нужно.

Еще есть некоторые выводы, которые в режиме сна автоматически переводятся в аналоговый режим и при отсутствии внешних цепей начинают потреблять тот самый сквозной ток. Помогал коллеге выжать все возможное из STM32L151, последние микроамперы выжали принудительно заземлив снаружи неиспользуемый вход, если память не изменяет, низкочастотного кварца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет. На дискавери, правда, не JTAG, а SWD. Пробовал полностью отключать интерфейс программирования от целевого контроллера: на токопотребление это не оказывает влияния, либо оказывает незначительно.

 

Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку.

В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал. Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны. Завтра попробую ваш вариант и отпишусь о результатах. Хорошо, что у вас есть опыт работы с этими камнями, я тоже хочу выжать из мк все возможное:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал.
Нельзя верить всему, что пишут в интернете :)

Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны.
Да, в самом деле, у этого процессора так (но не для всех выводов, поэтому мы с входом кварца и боролись). Может мой совет когда-нибудь пригодится вам в режиме stop. У LPC11xx порты свое состояние сохраняли. Или я его тоже в stop ронял...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__WFI(); // Попробуйте добавить перед while();

 

Эта инструкция внутри функции PWR_EnterSTANDBYMode();

 

Проблема решена. Ток хавали резисторы в цепи BOOT0. Выпаял резисторы R26 и R27 (см. принципиалку), ногу BOOT0 завел на землю. Токопотребление в режиме Standby упало до 1 мкА, точнее померять нет возможности. Всем отписавшимся в теме спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нельзя верить всему, что пишут в интернете :)

Это пишут не просто в интернете, а в документации на контроллеры - http://www.st.com/content/ccc/resource/tec....DM00033348.pdf

To set the device in the lowest possible power mode, all pins should be configured as analog

input (AIN), because in analog configuration the Schmitt trigger input is deactivated,

providing zero consumption for each I/O pin

Дока на STM32F2, но предположу, что это актуально и для STM32L1, по крайней мере у меня в проекте сконфигурировано именно так и потребление соответствует заявленному.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...