Изменить : этот вопрос не так. У 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? , предполагает, что я не могу определить, какой запуск вызван в программном обеспечении. Я не нашел там других постов, которые бы давали больше света.
Как я могу использовать программное или аппаратное обеспечение для определения, после пробуждения, какой сигнал активизации был активирован?
Ответы:
Я не знаю деталей этой части ST, поэтому я предполагаю, что вы правильно ее описали.
Процессор должен проснуться очень скоро после нажатия любой кнопки. Это должно быть особенно верно, если он имеет внутренний RC генератор. Даже если вам по каким-то причинам нужно бежать из кристалла, возможно, вы сможете запустить деталь с внутреннего RC, а затем переключиться на кристалл. Есть микро, которые могут делать такие вещи, хотя я не знаю, один ли из них ваш.
В любом случае, вы читаете оба ввода как можно скорее после пробуждения. Если нет ничего необычного в этом ST micro, это должно быть от мс до нескольких десятков мс от нажатия кнопки.
Чтобы гарантировать, что линия все еще находится на низком уровне, используйте конденсатор, чтобы поддерживать линию на низком уровне до 100 мс после отпускания кнопки.
Например, скажем, гарантированный логический низкий уровень входного сигнала составляет 20% от напряжения питания. Линия подключена с помощью резистора и имеет конденсатор на землю. Кнопка замыкает линию на землю. Следовательно, линия поднимается высоко и активно нажимается на землю при нажатии кнопки. Когда кнопка отпущена, напряжение экспоненциально уменьшается в направлении питания.
Распад до 20% от окончательного значения происходит в 0,22 постоянных времени. Допустим, вы хотите гарантировать, что линия выглядит низкой в течение 100 мс после нажатия кнопки. Это означает, что постоянная времени RC должна быть 450 мс. При нагрузке 100 кОм емкость должна составлять 4,5 мкФ. Таким образом, крышка 4,7 мкФ 10 В подойдет.
В итоге вот схема:
источник