Визначте, який моментний перемикач спричинив пробудження процесора 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, як визначити походження пробудження з режиму очікування? , говорить про те, що я не можу виявити, яке пробудження викликане програмним забезпеченням. Я не знайшов там інших публікацій, які б більше не втішалися.

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



1
Знайдено кілька варіантів STM32F105, вони мають лише Один штифт. Яку частину ви точно маєте на увазі, а яку шпильками?
berendi - протестуючи

@berendi У мого STM32F105, як ви кажете, є лише одна шпилька для пробудження. Він налаштований у режимі STOP MODE, а не STANDBY, як я зазначив у своєму запитанні. Він використовує EXTI події для пробудження. Я змішав значення тих "EXTI подій" із "шпильками для пробудження". Але я здогадуюсь, відповідь, надана Оліном, все ж корисна, якщо комусь потрібно розрізнити "розбуджений RTC" або "розбуджений штифтом для пробудження" в режимі очікування. Хтось має пропозиції, як відредагувати це питання, щоб відповідати Олінської відповіді? Невелика примітка на початку, що описує, що не так? Цілу переробку? Або мені просто видалити ціле запитання?
Даніель Наслунд

1
Існують контролери ST з більш ніж одним штифтом пробудження, як F0, F3, L0, або L1, де джерело не може бути визначене після виходу з режиму очікування, оскільки вони мають єдиний прапор вводу будильника. ST виправив цей нагляд спочатку в останніх серіях F7 та L4, які мають окремі прапорці для кожного вводу пробудження.
berendi - протестуючи

Відповіді:


11

Я не знаю подробиць цієї частини ST, тому я вважаю, що ваш опис є правильним.

Процесор повинен прокинутися дуже скоро після натискання будь-якої кнопки. Це має бути особливо вірно, якщо він має внутрішній RC-генератор. Навіть якщо з точки зору точності вам потрібно бігти з кристала в кінцевому підсумку, можливо, ви можете запустити частину з внутрішнього RC, а потім перейти до кристала. Є мікроси, які можуть робити такі речі, хоча я не знаю, чи ваша одна з них.

У будь-якому випадку ви читаєте обидва введення якомога швидше після пробудження. Якщо немає нічого незвичайного в цьому мікрофоні ST, це має бути від мс до декількох 10 секунд мс від натискання кнопки.

Щоб гарантувати, що лінія залишається низькою, використовуйте конденсатор, щоб утримувати лінію низькою до 100 мс після відпускання кнопки.

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

Занепад до 20% від кінцевого значення відбувається за 0,22 константи часу. Скажімо, ви хочете, щоб гарантувати, що лінія виглядає низькою протягом 100 мс після натискання кнопки. Це означає, що константа часу RC повинна становити 450 мс. При 100 кОм витягу, ємність повинна складати 4,5 мкФ. Таким чином, 4,7 мкФ 10 В кришка добре зробила б.

У підсумку, ось схема:


1
Якщо має бути навпаки, STM32 прокидаються на підйомі. Крім того, afaik вони завжди починаються з внутрішнього годинника, перехід на зовнішній кристал і pll здійснюється програмним забезпеченням. Проблема полягає в стартовому коді, що постачається або генерується інструментом CubeMX, що ускладнює запуск користувацького коду перед установкою дерева годинника.
berendi - протестуючи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.