dima311043 0 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба Всем привет. Работаю с отладочной платой 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба http://olegart.ru/wordpress/2016/12/24/4965/ - не поможет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба Еще можно обратить внимание на неиспользуемые выводы. После включения питания они настроены на ввод без подтяжек, при этом под воздействием наводок и утечек потенциал на них стремится к половине питания, что приводит к протеканию сквозных токов во входных каскадах. Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку. Также стоит помнить о том, что в корпуса с разным количеством выводов пакуются одни и те же кристаллы и если в вашем корпусе нет, скажем, ноги PC7 - это не значит, что входных цепей этой ноги нет на кристалле. То есть требование перевести на выход и вывести ноль относится и к этой ноге тоже. Но бывают и обратные ситуации - если какого-то порта в данном корпусе нет целиком, то его может не быть и на кристалле. Тогда попытка записи в этот порт приведет к вылету в исключение и трогать этот порт не нужно. Еще есть некоторые выводы, которые в режиме сна автоматически переводятся в аналоговый режим и при отсутствии внешних цепей начинают потреблять тот самый сквозной ток. Помогал коллеге выжать все возможное из STM32L151, последние микроамперы выжали принудительно заземлив снаружи неиспользуемый вход, если память не изменяет, низкочастотного кварца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima311043 0 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба http://olegart.ru/wordpress/2016/12/24/4965/ - не поможет? Нет. На дискавери, правда, не JTAG, а SWD. Пробовал полностью отключать интерфейс программирования от целевого контроллера: на токопотребление это не оказывает влияния, либо оказывает незначительно. Неиспользуемые выводы нужно или перевести в режим выхода и вывести ноль (ноль - для уменьшения утечек на землю, если вокруг ноги с высоким потенциалом - лучше вывести единицу), либо включить соответствующую подтяжку. В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал. Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны. Завтра попробую ваш вариант и отпишусь о результатах. Хорошо, что у вас есть опыт работы с этими камнями, я тоже хочу выжать из мк все возможное:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба В библиотечных примерах все пины переводятся в режим аналогового входа, про конфигурирование их как выход нигде не читал.Нельзя верить всему, что пишут в интернете :) Вообще в режиме standby все выводы переходят в третье состояние и становятся недоступны.Да, в самом деле, у этого процессора так (но не для всех выводов, поэтому мы с входом кварца и боролись). Может мой совет когда-нибудь пригодится вам в режиме stop. У LPC11xx порты свое состояние сохраняли. Или я его тоже в stop ронял... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSVA 0 31 мая, 2017 Опубликовано 31 мая, 2017 · Жалоба __WFI(); // Попробуйте добавить перед while(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima311043 0 1 июня, 2017 Опубликовано 1 июня, 2017 · Жалоба __WFI(); // Попробуйте добавить перед while(); Эта инструкция внутри функции PWR_EnterSTANDBYMode(); Проблема решена. Ток хавали резисторы в цепи BOOT0. Выпаял резисторы R26 и R27 (см. принципиалку), ногу BOOT0 завел на землю. Токопотребление в режиме Standby упало до 1 мкА, точнее померять нет возможности. Всем отписавшимся в теме спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 1 июня, 2017 Опубликовано 1 июня, 2017 · Жалоба Нельзя верить всему, что пишут в интернете :) Это пишут не просто в интернете, а в документации на контроллеры - 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, по крайней мере у меня в проекте сконфигурировано именно так и потребление соответствует заявленному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться