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

Потребление в режиме Standby y HK32F030F4P6

Приветствую участников форума,

В процессе изучения реального потребления в режиме Standby y HK32F030F4P6 на макетной плате собственной разработки обнаружилось, что вместо 1,64 мкА потребление составляет около 175 мкА. При этом все GPIO переключены в состояние входов, в цепи питания (где измеряется ток) есть только конденсаторы  сам микроконтроллер. При старте никакие периферийные блоки, кроме GPIO, не настраиваются и не включаются. Для перехода в режим Standby используется следующий код:

// Configure standby mode
PWR->CR  &= ~PWR_CR_LPDS;
PWR->CR  |=  PWR_CR_PDDS | PWR_CR_CWUF | PWR_CR_CSBF;

// PWR->CSR2 SHDS bit to 1
*((uint32_t*)(PWR_BASE + 0x30)) |= (1 << 7);

// Set SLEEPDEEP in system control register
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

while (1) {
	__WFE();
}

Пин BOOT0 подтянут с помощью резистора 100 кОм к земле, NRST подтянут с помощью 100 кОм к питанию. Линии SWD и NRST на время измерения отключаются от кабеля программирования.

Поскольку у меня ранее не было нужды и опыта работы с аналогичными STM32 в режиме Standby я возможно упускаю какую-то необходимую настройку? Хотя с точки зрения описания на HK32 я всё сделал правильно, даже взвёл в 1 бит SHDS, отсутствующий у аналогичного STM32. Но тем не менее это не помогает.

Был ли у кого-нибудь опыт работы с этими МК в режимах пониженного энергопотребления? Какие есть подводные камни при настройке?

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


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

2 minutes ago, makc said:

все GPIO переключены в состояние входов

Входов или выходов? На STM32F070, например, приходилось переключать на выход в т.ч. и не разваренные выводы, чтобы достичь минимального потребления.

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


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

4 минуты назад, aaarrr сказал:

Входов или выходов? На STM32F070, например, приходилось переключать на выход в т.ч. и не разваренные выводы, чтобы достичь минимального потребления.

Пробовал и так, и так, потребление меняется на десяток микроампер, т.е. в пределах погрешности эксперимента.
Правда настраивал только A, B и F, т.к. у него есть только они в этом корпусе.

Дополнение: настроил все порты на выходы и перевёл их в 0 - ничего не изменилось.

GPIOA->MODER = 0x55555555;
GPIOB->MODER = 0x55555555;
GPIOC->MODER = 0x55555555;
GPIOD->MODER = 0x55555555;
GPIOF->MODER = 0x55555555;

GPIOA->PUPDR = 0;
GPIOB->PUPDR = 0;
GPIOC->PUPDR = 0;
GPIOD->PUPDR = 0;
GPIOF->PUPDR = 0;

GPIOA->ODR = 0x00000000;
GPIOB->ODR = 0x00000000;
GPIOC->ODR = 0x00000000;
GPIOD->ODR = 0x00000000;
GPIOF->ODR = 0x00000000;

 

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


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

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=169702&do=findComment&comment=1843249 не поможет?
А то там уж чуть ли не интегралы брать стали ;-)

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


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

10 минут назад, Obam сказал:

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=169702&do=findComment&comment=1843249 не поможет?
А то там уж чуть ли не интегралы брать стали ;-)

Это я видел, но ничего не смог найти на эту тему в китайском reference manual. Возможно, что они что-то недоговаривают и там есть какие-то неописанные регистры управления питанием, с них станется. Плохо, что у них нет ни одного примера кода для ухода в глубокий сон. Обычно китайцы грешат плохой документацией, но зато есть какие-никакие примеры. Но у этих примеров нет, зато есть практически 1в1 переведенный с английского на китайский reference manual от stm32f03x. 🤦‍♂️

 

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


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

А каково перед уходом в сон состояние DBGMCU->CR?

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


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

Не смотрел, но при уходе в сон SWD отваливается намертво и для перепрошивки подключиться можно только с установленным в активный уровень ресетом.

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


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

21 минуту назад, makc сказал:

но при уходе в сон SWD отваливается намертво

Так вы же его ноги на выход перенастраиваете, вот он и отваливается.

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


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

14 минут назад, Сергей Борщ сказал:

Так вы же его ноги на выход перенастраиваете, вот он и отваливается.

Точно. В данном случае это ни о чём не говорит. Доберусь до платы, проверю DBGMCU->CR. 

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


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

18 часов назад, makc сказал:

При старте никакие периферийные блоки, кроме GPIO, не настраиваются и не включаются.

Стандартный совет - проверить всю периферию еще раз:

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

- Посмотреть, нет ли периферийных модулей, которые не включаются при старте по-умолчанию, но требуются для нормального перехода в спящий режим.
  Включить их вручную и настроить, если это необходимо.
 

Изменено пользователем quark

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


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

28 минут назад, quark сказал:

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

Что значит "без моего ведома"? У меня мой чистый стартап + пустой main, я даже тактирование не настраиваю во избежание, так сказать (работаю на HSI). Или вы имеете в виду, что нужно проверить все регистры (сдампить, например) и если что-то включено, то отключить?

30 минут назад, quark сказал:

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

Судя по китайскому описанию и его предтече от ST таких зависимостей я не нашёл. Для модулей SCB и PWR, непосредственно участвующих в переходе в состояние сна, битов управления их включением/выключением я вообще не нашёл. 

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


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

21 минуту назад, makc сказал:

Что значит "без моего ведома"?

Этот пример уже приводил в теме, на которую была ссылка выше.
У PIC-ов, в младших моделях, по умолчанию, включается компаратор при старте. Без вашего ведома.
Уверены, что в вашем МК нет чего-то подобного?

21 минуту назад, makc сказал:

Судя по китайскому описанию и его предтече от ST таких зависимостей я не нашёл. Для модулей SCB и PWR, непосредственно участвующих в переходе в состояние сна, битов управления их включением/выключением я вообще не нашёл. 

Если полная и внятная документация отсутствует, то придется проверить все периферийные модули подряд.
Вручную.

P.S. Сочувствую...
У Вас есть более конструктивный план? )))

Изменено пользователем quark

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


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

Может, еще биты FLITFEN и SRAMEN сбросить в 0 (они после сброса установлены)? Это в RCC->AHBENR.

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


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

2 минуты назад, Arlleex сказал:

Может, еще биты FLITFEN и SRAMEN сбросить в 0 (они после сброса установлены)? Это в RCC->AHBENR.

Можно попробовать, но токи порядка 170 мкА не похожи на потребление неактивного (без тактирования) флеша или статической памяти.

21 минуту назад, quark сказал:

Уверены, что в вашем МК нет чего-то подобного?

Не уверен, но проверил по описанию, что аналоговые блоки должны быть выключены, хотя специально я их не отключал.

23 минуты назад, quark сказал:

Если полная и внятная документация отсутствует, то придется проверить все периферийные модули подряд.
Вручную.

Я уже проходил через такое и второй раз не хочется, честно говоря. И, надеюсь, не придется. ;-)

24 минуты назад, quark сказал:

P.S. Сочувствую...
У Вас есть более конструктивный план? )))

Пока нет, собираю ваши предложения и думаю, что это ещё может быть. 

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


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

10 минут назад, makc сказал:

Не уверен, но проверил по описанию, что аналоговые блоки должны быть выключены, хотя специально я их не отключал.

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

 

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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