Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Микропотребление STM32L100
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
razrab83
Собрал девайс на STM32L100, написал прогу. Всё работает, но не могу получить микропотребление. Хочу в режим Stop+RTC. По даташтиту 1,4 мкА. Я смог получить 50 мкА.

Наверно куда-то на плате утекает. Есть такая же плата, на которой кроме процессора и подтяжки ресета ни чего не запаяно. Залил туда этот-же код - получил в стопе теже 50 мкА.
Собрал в кубе новый проект, в котором только debugwire и RTC использую, клокирую от HSI: итог 500 мкА!!! Ладно, хал в топку.... собрал холоворд в иаре

Код
#include "stm32l1xx.h"
int main()
{
   pause();//сделал нопами паузу в несколько секунд, чтоб можно без болезненно перезаписать/стереть флешь
  PWR->CR |= 1; // Voltage regulator in low-power mode during deepsleep/Sleep/Low-power run mode
  __WFI();
}

получил 0,9 мА.

залил на эту голую плату собранный пример из ...STM32Cube_FW_L1_V1.8.0\Projects\STM32L100C-Discovery\Examples\PWR\PWR_STOP\EWARM - получил тоже что-то около 0,5-1 мА
Что не так? Как получить микропотребление?
x893
Отключить SWD/SWC после прошивки и сделать RESET.
vovanse
Все неиспользуемые порты - на выход и на "0", плату отмыть, отладчик не подключать.. Как-то так.
razrab83
Цитата(x893 @ Jul 24 2018, 19:39) *
Отключить SWD/SWC после прошивки и сделать RESET.

Естественно отключаю. Ресет не делаю, отключаю питание, отключаю отладчик, включаю питание, измеряю ток потребления.

Цитата
плату отмыть
... и протереть педали.

Плата чистая. Заливаю рабочую прошивку - потребление 50мкА, заливаю тестовую (полный код в первом посте) - 900 мкА.

Цитата
Все неиспользуемые порты - на выход и на "0"
Это можно проверить.... но как на них подать 0, если порты не используются? Т.е. нет даже клоков на порт. Или нужно на все порты подать клок и все порты проинитить?
razrab83
Вот плата. Куда тут может утекать? Добавил в код deepsleep - не помогло.

Код
#include "stm32l1xx.h"
int main()
{
   pause();
  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
  PWR->CR |= PWR_CR_LPSDSR;
  __WFI();
}
Может питание аналоговое отрезать? или VLCD? Но эта периферия отключена (после сброса) - не должно быть потребления.
segment
Осциллографом смотрели ток потребления, который 50мкА? Это случаем не периодические пробуждения устройства? Подтяжку на reset поменяйте на 100к, на всякий случай
AVR
Пожалуйста, не обижайтесь, но... Измерятор-то правильный? Что если дать вольт через мегаомный резюк - увидит прибор микроампер? А то может у него шкала 50 мкА, т.е. наврал производитель.
razrab83
Цитата(segment @ Jul 25 2018, 08:29) *
Осциллографом смотрели ток потребления, который 50мкА? Это случаем не периодические пробуждения устройства? Подтяжку на reset поменяйте на 100к, на всякий случай

Нет, не пробуждение. Да и причин проснуться нет. Весь код в 3-х строчках. Больше нет ни чего, ни куба, ни spl.... хотя нет... есть ещё startup от st.
На stm8l получал единицы мкА, там ресет подтягивал 10 кОм.

Код
Измерятор-то правильный?
мультиметр.... специально не калибровал, но потребление радиомодуля в слыпрежиме 1 мкА, прибор колеблется 1-2 мкА.... stm8 по даташиту 1 мкА - прибор 1-2 мкА, stm8s по даташиту 10 мкА, прибор показал 10 мкА.

да и если даже он врёт.... с одной прошивкой 50 мкА на 2-х платах, с другой 500 мкА на двух платах.

Что-то st-эмовцы недоговаривают в даташитах... или я найти не могу.... вот в стм8 - там 3 порта, PA, PC, PB. В каждом я использую несколько ножек. Т.е. в начале программы я подаю клоки на все GPIO, потом иничу нужные, потом ненужные иничу в режим минимального потребления. Результат на лицо мультиметр - как по даташиту. Каждая периферия потребляет ток согласно таблицам в даташитах.

Теперь stm32l100 - тут много портов.... использую мало. Те что не использую, какойнить GPIOC, то вообще не подаю на него клоки, ибо он не нужен. Для эксперимента с микропотреблением на голой плате не инитил вообще ни какую периферию.... ни цап-ацп, ни gpio, ни клоки.... делаю всё строго по мануалу: даю sleepdeep, даю PWR_CR_LPSDSR и спать!
Цитата
– Set SLEEPDEEP bit in Cortex ® -M3 System Control register
– Clear PDDS bit in Power Control register (PWR_CR) //это в нуле по сбросу
– Clear WUF bit in Power Control/Status register (PWR_CSR)//это в нуле по сбросу
– Select the voltage regulator mode by configuring LPSDSR bit in PWR_CR

Т.е. останавливаются все клоки, останавливается вся периферия, останавливается ядро, отключается флешь, сохраняется озу и состояние портов. ЖРЁТ милиампер!!! Да как так-то? Или не проиниченные GPIO без клоков жрут токи?
ViKo
А если совсем ничего не записать в МК, сколько потребляет? rolleyes.gif
Obam
Цитата(razrab83 @ Jul 25 2018, 05:38) *
... но как на них подать 0, если порты не используются? Т.е. нет даже клоков на порт. Или нужно на все порты подать клок и все порты проинитить?

Да, подать тактирование на GPIO, проинитить - выходы, в "0", отключить пулл-апы-дауны, отключить тактирование.
*Leks*
Цитата(ViKo @ Jul 25 2018, 16:41) *
А если совсем ничего не записать в МК, сколько потребляет? rolleyes.gif

На днях запаял в новую плату чистый stm32f303 и включил. Так он грелся, зараза. Я думал, что что в топологии напутал чего, но заливка прошивки прошла штатно и греться перестало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.