Spisu treści:
- Krok 1: Wymagania sprzętowe i programowe
- Krok 2: Zrozumienie problemu
- Krok 3: Konfiguracja STM32CubeMX
- Krok 4: Rozwój oprogramowania Keil
- Krok 5: Wniosek
Wideo: Odbicie przycisku STM32CubeMX z przerwaniem: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Cześć, w tym samouczku postaram się podać moje proste rozwiązanie, aby zapobiec odbijaniu się przycisków, co jest bardzo poważnym problemem. W Internecie jest wiele filmów oferujących rozwiązanie tego problemu, ale żaden z nich nie dotyczy przerwania zewnętrznego. We wszystkich tych filmach naciśnięcie przycisku jest sprawdzane metodą odpytywania, która jest nieefektywna. A więc zacznijmy!
Krok 1: Wymagania sprzętowe i programowe
Wymagania sprzętowe:
- Płytka rozwojowa STM32 ARM
- Komputer
Wymagania Systemowe:
- STM32CubeMX
- Keil uVision5
Krok 2: Zrozumienie problemu
Dlatego staramy się znaleźć rozwiązanie problemu odbijania się przycisków. Dlatego musimy zrozumieć problem. Tak więc, gdy naciśniemy przycisk, powinien pojawić się stan odwrotny do poprzedniego stanu. Na przykład, jeśli był WYSOKI, musi być NISKI, a jeśli był NISKI, to musi być WYSOKI. Jest to jednak stan idealny (w PROTEUSIE:)) W rzeczywistości, gdy naciśniemy przycisk, zanim przejdzie do stanu bezczynności, zaczyna on odbijać się między HIGH a LOW. Udaje więc, że został kilkakrotnie wciśnięty, co sprawia problemy. Co więc powinniśmy zrobić?
Tutaj chcę zauważyć, że w tym przykładzie użyjemy przerwania zewnętrznego w celu wykrycia naciśnięcia przycisku. Tak więc po wykryciu naciśnięcia przycisku musimy odczekać trochę czasu, np. 50mS, aby osiągnąć stan bezczynności i ponownie sprawdzić, czy przycisk jest w stanie bezczynności, czy nie. Jeśli jest w stanie bezczynności, możemy kontynuować nasze zadanie. Zobaczmy kod:)
Krok 3: Konfiguracja STM32CubeMX
Musimy więc najpierw włączyć zewnętrzne przerwanie dla naszego przycisku (zakładam, że używasz karty wykrywania STM32F407VG):
- W zakładce "Pinout & Configuration" kliknij pin PA0, który jest podłączony do przycisku i wybierz GPIO_EXTI0, który włącza zewnętrzne przerwanie na tym pinie.
- Zmień „etykietę użytkownika” pinezki na „Push_Button” lub cokolwiek chcesz.
Następnie musimy skonfigurować timer, aby stworzyć opóźnienie czasowe 50ms:
- Wejdź do sekcji „Timery”
- Kliknij na TIM1
- Wybierz „Zegar wewnętrzny” jako źródło zegara
-
W konfiguracji (jeśli chcesz zrozumieć ten rozdział, zapoznaj się z tym samouczkiem, wysoce zalecane "Sterowanie serwosilnikiem za pomocą MCU STM32F4 ARM"):
- Ustaw preskaler na 32000
- I okres licznika do 50
- W zakładce "Ustawienia NVIC" włącz wszystkie przerwania
Włącz diodę LED jako wyjście:
Kliknij PD12 i ustaw jako „GPIO_Output”
Następnie skonfiguruj zegar jak na obrazku powyżej i wygeneruj kod.
Krok 4: Rozwój oprogramowania Keil
Najpierw definiujemy zmienną stanu, która zapewni, że nie uruchomimy timera wewnątrz przerwania zewnętrznego, gdy nastąpi odbicie:
/* KOD UŻYTKOWNIKA POCZĄTEK PFP */bool state = true; /* KOD UŻYTKOWNIKA KONIEC PFP */
Następnie piszemy ISR dla przerwania zewnętrznego:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == Push_Button_Pin && state == true){ HAL_TIM_Base_Start_IT(&htim1); stan = fałsz; } inny{ _NOP(); } }
Po naciśnięciu przycisku sprawdzamy, czy był to nasz zdefiniowany przycisk i czy stan jest prawdziwy. Na początku stan będzie prawdziwy, aby wprowadzić instrukcję if. Po wejściu uruchamiamy timer i ustawiamy stan na false, aby mieć pewność, że odbijanie nie spowoduje restartu timera.
Następnie piszemy ISR dla przerwania czasowego:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ /* Zapobieganie ostrzeżeniu o kompilacji nieużywanych argumentów */ UNUSED(htim);
/* UWAGA: Ta funkcja nie powinna być modyfikowana, gdy potrzebne jest wywołanie zwrotne, HAL_TIM_PeriodElapsedCallback może być zaimplementowany w pliku użytkownika */ if(HAL_GPIO_ReadPin(Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); stan = prawda; HAL_TIM_Base_Stop_IT(&htim1); } }
/* KOD UŻYTKOWNIKA KONIEC 4 */
Po 50mS sprawdzamy, czy przycisk jest jeszcze w stanie zresetowanym lub zwolniony, jeśli tak to wiemy, że przycisk jest w stanie spoczynku. Następnie przełączamy diodę, ustawiamy stan na prawdziwy, aby móc wykryć kolejne naciśnięcie przycisku i zatrzymujemy timer, aby móc go ponownie uruchomić.
Tak więc ten proces zapewni, że unikniemy problemów z odbijaniem.
Krok 5: Wniosek
To był kod odbicia przycisku. Chcę zauważyć, że ten kod został opracowany przeze mnie i nie jestem doświadczonym programistą. Tak więc z pewnością mogą wystąpić błędy. Jeśli masz lepsze rozwiązanie, zanotuj je. Nie zapomnij, jeśli napotkasz jakiś problem, napisz do mnie, a postaram się pomóc.
Zalecana:
Prosty przełącznik LED przycisku monety (za pomocą wagi): 8 kroków
Prosty przełącznik LED przycisku monety (za pomocą wagi): Jest to stosunkowo prosty przełącznik przycisku monety do wykonania. Po przyłożeniu ciężaru do przewodów cęgów siła skierowana w dół zapala diody LED
Moja próba melodii brzęczyka przycisku Arduino: 11 kroków
My Attempt at the Arduino Button Buzzer Melody: W tym samouczku pokażę, jak przycisk może rozpocząć melodię. W ciągu roku szkolnego wiele z naszego życia to dzwonki lub tony, które informują nas, kiedy nadszedł czas, aby wyjść lub czas iść. Większość z nas rzadko zatrzymuje się i myśli o tym, jak te różne
Visuino Jak używać przycisku jako wejścia do sterowania takimi rzeczami jak dioda LED: 6 kroków
Visuino Jak używać przycisku jako wejścia do sterowania takimi rzeczami jak dioda LED: W tym samouczku dowiemy się, jak włączać i wyłączać diodę LED za pomocą prostego przycisku i Visuino. Obejrzyj film demonstracyjny
Zastosowanie wysuwanego przycisku z wibracją: 7 kroków (ze zdjęciami)
Zastosowanie wysuwanego przycisku ze sprzężeniem zwrotnym wibracyjnym: W tym samouczku najpierw pokażemy, jak używać Arduino Uno do sterowania silnikiem wibracyjnym za pomocą rozszerzonego przycisku. Większość samouczków dotyczących przycisków zawiera przycisk na fizycznej tablicy prototypowej, podczas gdy w tym samouczku przycisk jest
Redukcja, odbicie, recykling: 6 kroków
Redukcja, odbicie, recykling: Imprezy towarzyskie wytwarzają duże ilości odpadów, od aluminiowych puszek po plastikowe kubki, z których wszystkie można poddać recyklingowi. Wcześniej nie istniały żadne programy zachęcające do tego recyklingu, więc uczniowie wyrzucali je i powodowali negatywne skutki dla en