Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33

STM32f4 режимы сна

07.02.2022, 14:08. Показов 5714. Ответов 50

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите разобраться с режимами сна на stm32f4. Недавно начал изучать эти контроллеры и не могу найти сколько нибудь полезной информации на CMSIS для платы Black Pill. Читаю описание на другие чипы, но они, как я понимаю,несколько отличаются регистрами. Неплохо бы найти рабочий пример для F4, ну или хотя бы ссылку на толковое описание.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2022, 14:08
Ответы с готовыми решениями:

STM32F4 ADC режимы работы. Помогите разобраться
Здравствуйте! Я начал разбираться с АЦП на STM32F4Dyscovery. Вычитал, что у АЦП существуют два метода опроса: регулярные каналы и...

Режимы индикации или разные режимы работы светодиода
Добрый день! Помогите пожалуйста с задачей. Микроконтроллер attiny13a Необходимо реализовать разные режимы работы светодиода в...

Не работают режимы сна и гибернации после переустановки Windows
Привет всем! Не уверен что это тот раздел, но: после переустановки винды (сейчас Windows 7) у меня не работает режим сна и гибернизации, а...

50
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
10.02.2022, 13:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Vlad2022 Посмотреть сообщение
GPIOA->MODER &= ~GPIO_MODER_MODER0; //РА0 как цифровой вход
разве там не аналоговый вход должен быть ?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 13:32
На f100 у меня работает такой код:
C
1
2
3
4
5
6
7
8
void gotosleep(){
  //sleep
  PWR->CSR |= PWR_CSR_EWUP;
  SCB->SCR |= SCB_SCR_SLEEPDEEP;
  PWR->CR |= PWR_CR_PDDS;
  PWR->CR |= PWR_CR_CWUF ; //очищаем wakeup flag
  __WFI();
}
Настройка вывода на вход с пулл-апом.
Но у меня режим отключения питания (standby что ли), где после нажатия на кнопку контроллер сбрасывается, сохраняется только бэкап домен.

Добавлено через 2 минуты
А вот для L151, там именно сон до срабатывания таймера:
C
1
2
3
4
5
6
7
void go_sleep(){
  RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR
  SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep
  PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep
  PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag
  __WFI();
}
Добавлено через 57 секунд
Оба этих куска кода писал давно и уже толком не помню подробностей, но сейчас бросается в глаза, что у меня не __WFE используется, а __WFI
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
10.02.2022, 13:52
кстати, может быть здесь что будет полезного

Добавлено через 9 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
но сейчас бросается в глаза, что у меня не __WFE используется, а __WFI
первое для событий, второе для прерываний...
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
10.02.2022, 13:56
вот из документа по ссылке
Миниатюры
STM32f4 режимы сна  
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 14:29
Цитата Сообщение от ВитГо Посмотреть сообщение
первое для событий, второе для прерываний...
Раз уж об этом заговорили, в чем разница между событием и прерыванием и при чем здесь флаги?
Например, у нас есть таймер, у него произошло сравнение счетного регистра с регистром ШИМа, взвелся соответствующий флаг в регистре статуса. Если при этом прерывание было настроено и разрешено, оно произойдет, и будет происходить пока бит не снимут. Если настроено и запрещено, то дождется разрешения и тогда начнет происходить. Но если на этот же бит повесить DMA, он отработает свою пересылку числа и сам снимет бит. Так что даже если прерывание настроено и разрешено, оно не произойдет.
Но наличие бита в регистре статуса это ведь состояние, а не событие. Событием было бы выставление или снятие бита, но что прерывания, что DMA не на это реагируют. Событием можно считать запись числа в регистр данных какого-нибудь UART'а, но само по себе оно ни к event'ам, ни к interrupt'ам в stm'овском понимании не относится.
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
10.02.2022, 15:31  [ТС]
Цитата Сообщение от ВитГо Посмотреть сообщение
разве там не аналоговый вход должен быть ?
Аналоговый тоже пробовал включать, но это не помогло. Пробовал разные инструкции, и __WFE и __WFI, не помогает.

COKPOWEHEU, вы привели примеры входа в режим сна, с этим проблем нет. Мне кажется у меня что-то с настройкой кнопки:
C
1
2
3
4
5
6
7
8
GPIOA->MODER |= GPIO_MODER_MODER0; //вот я перевел ее в аналоговый режим
PWR->CSR |= PWR_CSR_EWUP;                  //далее разрешил сигнал WakeUp по переднему фронту
 
RCC->APB1ENR |= RCC_APB1ENR_PWREN;  //и вошел в режим сна, допустим с прерываниями
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
PWR->CR |= PWR_CR_PDDS;
PWR->CR |= PWR_CR_CWUF;
__WFI();
По нажатию кнопки ничего не происходит. Это аппаратная кнопка на Black Pill, она по умолчанию подтянута резистором к питанию, может в этом проблема?

Добавлено через 36 минут
Все получилось! Возможно я ошибся с подтяжкой резистора, выводы кнопки на питание не звонятся, что в принципе логично при использовании РА0 как цифрового выхода. Но подав напрямую 3,3V на пин РА0, контроллер вышел из StandBy режима. Конфигурацией штатной кнопки мне не удалось добиться пробуждения контроллера.

Отпаял светодиод питания, и плата показала 120мкА потребления, надо подумать, как улучшить этот показатель.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 15:38
Цитата Сообщение от Vlad2022 Посмотреть сообщение
По нажатию кнопки ничего не происходит. Это аппаратная кнопка на Black Pill, она по умолчанию подтянута резистором к питанию, может в этом проблема?
Возможно. Для той же f100 указано, что из standby может вывести "WKUP pin rising edge".
Хотя, по идее, при нажатии и отпускании появятся оба фронта. У меня такой проблемы не было, все кнопки подтягивались к земле, а замыкались на питание.
А что если уводить в сон при зажатой кнопке - проснется ли при отпускании?
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
10.02.2022, 16:36  [ТС]
Попробовал, но при нажатой РА0, после ресета и ухода контроллера в спящий режим, при отпускании тоже ничего не происходит. В аналоговом режиме нет подтяжек к питанию, а кнопка коммутирует на землю, может в этом проблема, положительного фронта просто нет?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 17:26
Цитата Сообщение от Vlad2022 Посмотреть сообщение
В аналоговом режиме
Зачем там аналоговый режим?
Цитата Сообщение от Vlad2022 Посмотреть сообщение
нет подтяжек к питанию
Там же вроде внешний резистор стоит, нет?
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
10.02.2022, 17:27  [ТС]
Попробовал оставшиеся выводы порта А перевести в аналоговый режим, но ток не уменьшился. Что еще можно сделать, чтобы снизить потребление?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 17:34
А по другим событиям он просыпается? В рефмане пишут, что еще от RTC должен уметь.

Добавлено через 6 минут
Цитата Сообщение от Vlad2022 Посмотреть сообщение
Что еще можно сделать, чтобы снизить потребление?
Какой режим сна у вас сейчас, какое потребление и как измеряете? Учитываете ли, что на плате наверняка установлен стабилизатор, не обязательно экономичный?
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
10.02.2022, 17:52  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Зачем там аналоговый режим?
По даташиту на F401 сигнал WakeUp в разделе Additional functions, т.е. аналоговый. Сейчас попробую настроить РА0 на цифровой вход и проверить будет ли работать.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Там же вроде внешний резистор стоит, нет?
При включенном питании на кнопке 0 вольт, мне кажется что внешнего резистора как раз и нет, иначе был бы потенциал.

До RTC я пока не дошел, мне важно было запустить по кнопке.

Добавлено через 4 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Какой режим сна у вас сейчас, какое потребление и как измеряете? Учитываете ли, что на плате наверняка установлен стабилизатор, не обязательно экономичный?
StandBy, 120мкА. Меряю обычным тестером в линии 5В, а вот про стабилизатор я не подумал, может он тоже кушает. Интересно сколько на таких малых токах.

Добавлено через 8 минут
Да, просто как цифровой вход тоже работает
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 18:19
Лучший ответ Сообщение было отмечено Vlad2022 как решение

Решение

Цитата Сообщение от Vlad2022 Посмотреть сообщение
По даташиту на F401 сигнал WakeUp в разделе Additional functions, т.е. аналоговый.
Не вижу логики. По смыслу сигнал пробуждения логический. Как он вообще дойдет до цифровых цепей если цифровая часть порта выключена?
Цитата Сообщение от Vlad2022 Посмотреть сообщение
При включенном питании на кнопке 0 вольт, мне кажется что внешнего резистора как раз и нет, иначе был бы потенциал.
Так может, проще к гребенке подключиться? Резистор плюс кнопка.
Цитата Сообщение от Vlad2022 Посмотреть сообщение
StandBy, 120мкА. Меряю обычным тестером в линии 5В, а вот про стабилизатор я не подумал, может он тоже кушает. Интересно сколько на таких малых токах.
standby это же отключение всего контроллера кроме бэкап домена, там без разницы как была настроена периферия. Главное чтобы внешняя обвязка не тратила лишнего. Проверьте по схеме через что может утекать ток. Может, даже выходную дорожку со стабилизатора перерезать и в разрыве мерить ток.
Цитата Сообщение от Vlad2022 Посмотреть сообщение
Да, просто как цифровой вход тоже работает
это в каком смысле "тоже работает"?
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
10.02.2022, 19:58
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Раз уж об этом заговорили, в чем разница между событием и прерыванием
ну так мы же говорим о standby... ? то есть фактически даже не о сне, а о почти выключении... так что какие там могут быть прерывания если почти весь мку отключен ?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 20:05
Это был скорее общий вопрос о терминологии и устройстве
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
10.02.2022, 20:13
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это был скорее общий вопрос о терминологии и устройстве
ну как бы.... не знаю.. просто 3 режима, в последнем серьездно обесточивается ядро и периферия...
ну в принципе пусть будет терминология...
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
10.02.2022, 21:41
Связь между событием (event), прерыванием (interrupt) и флагами это вопрос о терминологии и устройстве. Он к режимам сна отношения не имеет.
Цитата Сообщение от ВитГо Посмотреть сообщение
просто 3 режима, в последнем серьездно обесточивается ядро и периферия...
Если речь о режимах сна, то есть как минимум LP run (строго говоря, это вообще не сон), sleep (останавливается ядро, но не периферия ЕМНИП), stop (собственно сон) и standby (отключение). Это не возражение вам, а скорее уточнение названий.
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
10.02.2022, 22:45  [ТС]
Лучший ответ Сообщение было отмечено COKPOWEHEU как решение

Решение

Запитал плату с Stm через штырь 3,3V от стабилизатора Ардуинки и на выходе получилось 13мкА потребления. Думаю это очень хороший показатель и меньше вряд ли получится, с которым можно надеяться на долгую жизнь батарейки.
Со штатной кнопкой разобраться так и не удалось, но все равно для удобства нужно выводить внешнюю кнопку, если на этой плате что то макетировать.
0
75 / 66 / 12
Регистрация: 09.02.2016
Сообщений: 940
Записей в блоге: 17
11.02.2022, 09:55
Цитата Сообщение от Vlad2022 Посмотреть сообщение
Со штатной кнопкой разобраться так и не удалось
а как вы определяете что mcu проснулся ?
не может быть такого что все работает, но вы неверно интерпретируете пробуждение ?
при пробуждении из standby происходит старт как при резете... может у вас просто циклический заход в сон происходит?
0
0 / 0 / 1
Регистрация: 07.02.2022
Сообщений: 33
11.02.2022, 11:27  [ТС]
ВитГо, нет, при пробуждении я все инициализирую заново, в цикле задержка и включение светодиода, плюс мультиметр показывает ток. Когда это Standby - мкА, проснулся - мА, так что видно все хорошо. Ну и если я принудительно подаю 3,3В на РА0, то все просыпается, включается светодиод, уходит в задержку и снова в сон. Так что в работе кода я уверен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2022, 11:27

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

Режимы
Здравствуйте. Возникла проблема с режимом выбора. В чем может быть проблема? void main() { bit isClick; int regim; int...

Режимы работы
Помогите, пожалуйста, понять пункт 4, что за режимы работы? "На вход подается", то есть просто считать символ с консоли и обрабатывать с...

режимы работы в БД
Всем привет. Требуется хранить в MySQL графики работы предприятий, т.е. время открытия и время закрытия для каждого дня недели. Данные...

Режимы адресации
Нужно обнулить массив, состоящий из строк, с помощью всех возможных режимов адресации.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru