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?
Odpowiedzi:
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:
źródło