Wykryj, który chwilowy przełącznik spowodował wybudzenie procesora STM32


10

Edycja : To pytanie jest nieprawidłowe. STM325105 ma tylko jeden pin aktywujący. Ale inne części ST mają więcej niż jeden pin budzący, więc podana odpowiedź jest ważna dla nich.


Mam stm32f105, który ma dwa chwilowe przyciski podłączone do wejść wakeup. Procesor jest przełączany w TRYB STANDBY. Po naciśnięciu dowolnego przycisku lub uruchomieniu zegara RTC procesor budzi się.

Problem polega na tym, że chcę, aby procesor robił różne rzeczy w zależności od tego, które wejście budzenia zostało uruchomione. Według 5.3.5 z ST stm32f105xx podręcznika , bez rejestry są zachowane, z wyjątkiem rejestru statusie wskazującą, że byliśmy budzeni (ale nie przez kogo) i 42 rejestrów zapasowych.

Tryb gotowości umożliwia osiągnięcie najniższego zużycia energii. Opiera się na trybie głębokiego zasypiania Cortex ® -M3, z wyłączonym regulatorem napięcia. Domena 1,8 V jest w związku z tym wyłączona. PLL, oscylator HSI i oscylator HSE są również wyłączone. SRAM i zawartość rejestru są tracone, z wyjątkiem rejestrów w domenie kopii zapasowej i obwodzie gotowości.

Po przebudzeniu z trybu gotowości wykonanie programu uruchamia się ponownie w taki sam sposób, jak po resecie (próbkowanie pinów rozruchowych, resetowanie wektora jest pobierane itp.). Flaga stanu SBF w Rejestrze kontroli mocy / statusu (PWR_CSR) wskazuje, że MCU było w trybie gotowości.

Ten post na forum ST: Jak ustalić pochodzenie Wakeup z trybu gotowości? , sugeruje, że nie mogę wykryć, które wybudzanie uruchomiło się w oprogramowaniu. Nie znalazłem tam żadnych innych postów, które dałyby więcej oświecenia.

Jak mogę użyć oprogramowania lub sprzętu do określenia, po wzbudzeniu, które wejście budzenia zostało uruchomione?


1
Poproś przycisk o naładowanie czapki i przeczytaj
PlasmaHH

1
Poszukaj kilku wariantów STM32F105, mają one tylko JEDEN pin budzika. Którą część dokładnie masz na myśli, a które piny?
berendi - protestujący

@berendi Mój STM32F105 ma, jak mówisz, tylko jedną pinezkę. Jest skonfigurowany w TRYBIE ZATRZYMANIA, a nie w trybie GOTOWOŚCI, jak stwierdziłem w moim pytaniu. Do budzenia wykorzystuje zdarzenia EXTI. Pomieszałem znaczenie tych „zdarzeń EXTI” z „pinami aktywacji”. Wydaje mi się jednak, że odpowiedź udzielona przez Olin jest nadal przydatna, jeśli ktoś musi rozróżnić między „budzeniem przez RTC” lub „budzeniem przez budzik” w TRYBIE GOTOWOŚCI. Czy ktoś ma sugestie, jak edytować to pytanie, aby dopasować odpowiedź Olinsa? Mała notatka na początku opisująca co jest nie tak? Cała reedycja? Czy powinienem po prostu usunąć całe pytanie?
Daniel Näslund,

1
Istnieją kontrolery ST z więcej niż jednym stykiem aktywującym, takie jak F0, F3, L0 lub L1, w których źródła nie można rzeczywiście ustalić po wyjściu ze stanu wstrzymania, ponieważ mają one pojedynczą flagę wejściową budzenia. ST najpierw poprawił ten nadzór w najnowszej serii F7 i L4, które mają osobne flagi dla każdego wejścia budzenia.
berendi - protestuje

Odpowiedzi:


11

Nie znam szczegółów tej części ST, więc założę, że twój opis jest poprawny.

Procesor powinien obudzić się wkrótce po naciśnięciu dowolnego przycisku. Powinno to być szczególnie prawdziwe, jeśli ma wewnętrzny oscylator RC. Nawet jeśli musisz w końcu uciec z kryształu ze względów dokładności, być może możesz rozpocząć część od wewnętrznego RC, a następnie przełączyć się na kryształ później. Są mikroskopy, które potrafią robić takie rzeczy, chociaż nie wiem, czy twój jest jednym z nich.

W każdym razie oba wejścia są odczytywane jak najszybciej po wybudzeniu. O ile nie jest coś niezwykłego w tym mikro ST, powinno to być od ms do kilku 10 ms od naciśnięcia przycisku.

Aby zagwarantować, że linia jest nadal niska, użyj kondensatora, aby utrzymać linię na niskim poziomie do 100 ms po zwolnieniu przycisku.

Załóżmy na przykład, że gwarantowany niski poziom wejściowy logiki wynosi 20% napięcia zasilania. Linia jest podciągana za pomocą rezystora i ma kondensator do masy. Przycisk zwiera linię do ziemi. Linia pływa więc wysoko i jest aktywnie zmuszana do uziemienia po naciśnięciu przycisku. Po zwolnieniu przycisku napięcie wykładniczo maleje w kierunku zasilania.

Rozkład do 20% wartości końcowej następuje w stałych czasowych 0,22. Powiedzmy, że chcesz zagwarantować, że linia wygląda nisko przez 100 ms po naciśnięciu przycisku. Oznacza to, że stała czasowa RC musi wynosić 450 ms. Przy podciągnięciu 100 kΩ pojemność musiałaby wynosić 4,5 µF. Więc czapka 4,7 µF 10 V byłaby ładna.

Podsumowując, oto obwód:


1
Powinno być na odwrót, STM32 budzą się na rosnącej krawędzi. Ponadto, zawsze zaczynają się od wewnętrznego zegara, przełączanie na zewnętrzny kryształ i pll odbywa się za pomocą oprogramowania. Problem polega na tym, że kod startowy jest dostarczany lub generowany przez narzędzie CubeMX, co utrudnia uruchomienie kodu użytkownika przed konfiguracją drzewa zegara.
berendi - protestuje
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.