Jump to content

    
Sign in to follow this  
razrab83

Микропотребление STM32L100

Recommended Posts

Собрал девайс на 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 мА

Что не так? Как получить микропотребление?

Edited by razrab83

Share this post


Link to post
Share on other sites
Отключить SWD/SWC после прошивки и сделать RESET.

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Вот плата. Куда тут может утекать? Добавил в код deepsleep - не помогло.

 

#include "stm32l1xx.h"
int main()
{
   pause();
  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
  PWR->CR |= PWR_CR_LPSDSR;
  __WFI();
}

Может питание аналоговое отрезать? или VLCD? Но эта периферия отключена (после сброса) - не должно быть потребления.

Share this post


Link to post
Share on other sites

Осциллографом смотрели ток потребления, который 50мкА? Это случаем не периодические пробуждения устройства? Подтяжку на reset поменяйте на 100к, на всякий случай

Share this post


Link to post
Share on other sites

Пожалуйста, не обижайтесь, но... Измерятор-то правильный? Что если дать вольт через мегаомный резюк - увидит прибор микроампер? А то может у него шкала 50 мкА, т.е. наврал производитель.

Share this post


Link to post
Share on other sites
Осциллографом смотрели ток потребления, который 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 без клоков жрут токи?

Edited by razrab83

Share this post


Link to post
Share on other sites
... но как на них подать 0, если порты не используются? Т.е. нет даже клоков на порт. Или нужно на все порты подать клок и все порты проинитить?

Да, подать тактирование на GPIO, проинитить - выходы, в "0", отключить пулл-апы-дауны, отключить тактирование.

 

Share this post


Link to post
Share on other sites
А если совсем ничего не записать в МК, сколько потребляет? :rolleyes:

На днях запаял в новую плату чистый stm32f303 и включил. Так он грелся, зараза. Я думал, что что в топологии напутал чего, но заливка прошивки прошла штатно и греться перестало.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this