Определить, какой кратковременный переключатель вызвал включение процессора STM32


10

Изменить : этот вопрос не так. У stm325105 есть только один контакт активации. Но у других ST-частей есть более одного контакта пробуждения, поэтому данный ответ действителен для них.


У меня есть stm32f105, у которого есть две кнопки, подключенные к входам пробуждения. Процессор установлен в РЕЖИМ ОЖИДАНИЯ. Когда нажата какая-либо из кнопок или срабатывает таймер RTC, процессор включается.

Проблема в том, что я хочу, чтобы процессор делал разные вещи, в зависимости от того, какой вход пробуждения был активирован. Согласно 5.3.5 из справочного руководства по ST stm32f105xx , регистры не сохраняются, за исключением регистра состояния, указывающего, что мы были разбужены (но не кем) и 42 резервных регистра.

Режим ожидания позволяет достичь минимального энергопотребления. Он основан на режиме бездействия Cortex ® -M3 с отключенным регулятором напряжения. Домен 1,8 В, следовательно, отключен. PLL, генератор HSI и генератор HSE также отключены. SRAM и содержимое регистров теряются, за исключением регистров в резервном домене и резервной схеме.

После выхода из режима ожидания выполнение программы возобновляется так же, как и после сброса (выборка пинов загрузки, выборка вектора и т. Д.). Флаг состояния SBF в регистре управления питанием / состояния (PWR_CSR) указывает, что MCU находился в режиме ожидания.

Это сообщение на форуме ST, Как определить происхождение Wakeup из Standby? , предполагает, что я не могу определить, какой запуск вызван в программном обеспечении. Я не нашел там других постов, которые бы давали больше света.

Как я могу использовать программное или аппаратное обеспечение для определения, после пробуждения, какой сигнал активизации был активирован?


1
Пусть кнопка зарядит шапку и прочтет это
PlasmaHH

1
Посмотрел несколько вариантов STM32F105, у них только ОДИН пин-код пробуждения. Какую часть вы имеете в виду, и какие контакты?
Беренди - протестует

@berendi Мой STM32F105 имеет, как вы говорите, только один пин-код пробуждения. Он настроен в режиме STOP, а не в режиме ожидания, как я уже говорил в своем вопросе. Он использует события EXTI для пробуждения. Я перепутал значение этих «событий EXTI» с «булавками для пробуждения». Но я полагаю, что ответ, предоставленный Олином, все еще полезен, если кто-то должен различать «разбудил по RTC» или «разбудил по пробуждению» в РЕЖИМЕ ОЖИДАНИЯ. У кого-нибудь есть предложения о том, как отредактировать этот вопрос, чтобы соответствовать ответу Олинса? Небольшая заметка в начале, описывающая, что не так? Ан всю перередактировать? Или я должен просто удалить весь вопрос?
Даниэль Нэслунд

1
Существуют контроллеры ST с более чем одним контактом пробуждения, например F0, F3, L0 или L1, где источник действительно не может быть определен после выхода из режима ожидания, поскольку у них есть один входной флаг пробуждения. ST исправил это упущение первым в новейших сериях F7 и L4, которые имеют отдельные флаги для каждого входа пробуждения.
Беренди - протестует

Ответы:


11

Я не знаю деталей этой части ST, поэтому я предполагаю, что вы правильно ее описали.

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

В любом случае, вы читаете оба ввода как можно скорее после пробуждения. Если нет ничего необычного в этом ST micro, это должно быть от мс до нескольких десятков мс от нажатия кнопки.

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

Например, скажем, гарантированный логический низкий уровень входного сигнала составляет 20% от напряжения питания. Линия подключена с помощью резистора и имеет конденсатор на землю. Кнопка замыкает линию на землю. Следовательно, линия поднимается высоко и активно нажимается на землю при нажатии кнопки. Когда кнопка отпущена, напряжение экспоненциально уменьшается в направлении питания.

Распад до 20% от окончательного значения происходит в 0,22 постоянных времени. Допустим, вы хотите гарантировать, что линия выглядит низкой в ​​течение 100 мс после нажатия кнопки. Это означает, что постоянная времени RC должна быть 450 мс. При нагрузке 100 кОм емкость должна составлять 4,5 мкФ. Таким образом, крышка 4,7 мкФ 10 В подойдет.

В итоге вот схема:


1
Должно быть наоборот, STM32s просыпаются на переднем крае. Кроме того, afaik они всегда начинаются с внутренних часов, переключение на внешний кристалл и pll выполняется программным обеспечением. Проблема заключается в коде запуска, предоставляемом или генерируемом инструментом CubeMX, что затрудняет запуск пользовательского кода перед настройкой дерева часов.
Беренди - протестует
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.