Inhaltsverzeichnis:
- Schritt 1: Hardware- und Softwareanforderungen
- Schritt 2: Das Problem verstehen
- Schritt 3: STM32CubeMX-Konfiguration
- Schritt 4: Keil Softwareentwicklung
- Schritt 5: Fazit
Video: STM32CubeMX-Tastenentprellung mit Interrupt - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Hallo, in diesem Tutorial werde ich versuchen, meine einfache Lösung zu geben, um das Zurückspringen von Tasten zu verhindern, was ein sehr ernstes Problem ist. Im Internet gibt es viele Videos, die eine Lösung für dieses Problem bieten, aber keines davon für externe Unterbrechungen. In all diesen Videos wird der Tastendruck durch eine ineffiziente Abfragemethode überprüft. So lass uns anfangen!
Schritt 1: Hardware- und Softwareanforderungen
Hardware-Anforderungen:
- STM32 ARM-Entwicklungsboard
- Ein Computer
Software Anforderungen:
- STM32CubeMX
- Keil uVision5
Schritt 2: Das Problem verstehen
Wir versuchen also, eine Lösung für das Problem mit dem Prellen der Schaltfläche zu finden. Daher müssen wir das Problem verstehen. Wenn wir also eine Taste drücken, sollte ein Zustand eintreten, der seinem vorherigen Zustand entgegengesetzt ist. Wenn es beispielsweise HIGH war, muss es LOW sein, und wenn es LOW war, dann muss es HIGH sein. Dies ist jedoch der Idealzustand (in PROTEUS:)) In Wirklichkeit beginnt er, wenn wir einen Knopf drücken, zwischen HIGH und LOW zu hüpfen, bevor er in den Ruhezustand kommt. Also tut so, als ob es mehrmals gedrückt wurde, was zu Problemen führt. Also, was sollen wir tun?
Hier möchte ich anmerken, dass wir in diesem Beispiel einen externen Interrupt verwenden, um den Tastendruck zu erkennen. Nachdem wir den Tastendruck erkannt haben, müssen wir also eine Weile warten, z. B. 50 ms, um den Ruhezustand zu erreichen und erneut zu überprüfen, ob sich die Taste im Ruhezustand befindet oder nicht. Wenn es sich im Ruhezustand befindet, können wir mit unserer Aufgabe fortfahren. Also, lass uns den Code sehen:)
Schritt 3: STM32CubeMX-Konfiguration
Also müssen wir zuerst den externen Interrupt für unseren Taster aktivieren (ich gehe hier davon aus, dass Sie das STM32F407VG Discovery Board verwenden):
- Klicken Sie auf der Registerkarte "Pinout & Configuration" auf den Pin PA0, der mit dem Taster verbunden ist, und wählen Sie GPIO_EXTI0, um einen externen Interrupt an diesem Pin zu aktivieren.
- Ändern Sie das "Benutzerlabel" des Pins in "Push_Button" oder was Sie wollen.
Dann müssen wir den Timer konfigurieren, um eine Zeitverzögerung von 50 ms zu erzeugen:
- Betreten Sie den Abschnitt "Timer"
- Klicken Sie auf TIM1
- Wählen Sie "Internal Clock" als Clock-Quelle
-
In der Konfiguration (Wenn Sie diesen Abschnitt verstehen möchten, lesen Sie bitte dieses Tutorial, dringend empfohlen "Servomotorsteuerung mit STM32F4 ARM MCU"):
- Prescaler auf 32000. einstellen
- Und Zählerperiode bis 50
- Aktivieren Sie auf der Registerkarte "NVIC-Einstellungen" alle Interrupts
LED als Ausgang aktivieren:
PD12 anklicken und als "GPIO_Output" einstellen
Konfigurieren Sie dann die Uhr wie im obigen Bild und generieren Sie den Code.
Schritt 4: Keil Softwareentwicklung
Zuerst definieren wir eine Zustandsvariable, die sicherstellt, dass wir den Timer nicht innerhalb eines externen Interrupts starten, wenn ein Bounce aufgetreten ist:
/* BENUTZERCODE BEGIN PFP */bool state = true; /* BENUTZERCODE ENDE PFP */
Dann schreiben wir ISR für externen Interrupt:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == Push_Button_Pin && state == true){ HAL_TIM_Base_Start_IT(&htim1); Zustand = falsch; } sonst{_NOP(); } }
Beim Drücken der Taste prüfen wir, ob es unsere definierte Taste war und ob der Zustand wahr ist. Am Anfang ist der Zustand wahr, um die if-Anweisung einzugeben. Nach der Eingabe starten wir den Timer und setzen den Zustand auf false, um sicherzustellen, dass das Bouncen den Timer nicht neu startet.
Dann schreiben wir ISR für Timer-Interrupt:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ /* Kompilierungswarnung für nicht verwendete Argumente verhindern */ UNUSED(htim);
/* HINWEIS: Diese Funktion sollte nicht geändert werden, wenn der Rückruf benötigt wird, der HAL_TIM_PeriodElapsedCallback könnte in der Benutzerdatei implementiert werden */ if(HAL_GPIO_ReadPin(Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); Zustand = wahr; HAL_TIM_Base_Stop_IT(&htim1); } }
/* BENUTZERCODE ENDE 4 */
Nach 50mS prüfen wir, ob sich die Taste noch im Reset-Zustand befindet oder losgelassen wurde, wenn ja, dann wissen wir, dass sich die Taste im Ruhezustand befindet. Dann schalten wir die LED um, machen den Zustand wahr, um einen weiteren Tastendruck erkennen zu können, und stoppen den Timer, um ihn erneut starten zu können.
Dieser Prozess wird also sicherstellen, dass wir ein Bounce-Problem verhindern.
Schritt 5: Fazit
Dies war der Code für die Tastenentprellung. Ich möchte darauf hinweisen, dass dieser Code von mir entwickelt wurde und ich kein erfahrener Programmierer bin. Es kann also sicher zu Fehlern kommen. Wenn Sie eine bessere Lösung haben, notieren Sie es bitte. Vergessen Sie nicht, wenn Sie auf ein Problem stoßen, schreiben Sie mir bitte und ich werde versuchen zu helfen.
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
DIY Circuit Activity Board mit Büroklammern - HERSTELLER - STEM: 3 Schritte (mit Bildern)
DIY Circuit Activity Board mit Büroklammern | HERSTELLER | STEM: Mit diesem Projekt können Sie den Weg des elektrischen Stroms ändern, um durch verschiedene Sensoren zu laufen. Mit diesem Design können Sie zwischen dem Aufleuchten einer blauen LED oder dem Aktivieren eines Summers wechseln. Sie haben auch die Wahl, einen lichtabhängigen Widerstand mit
Beginnen Sie mit Light Painting (kein Photoshop): 5 Schritte (mit Bildern)
Beginnend mit Light Painting (kein Photoshop): Ich habe vor kurzem eine neue Kamera gekauft und einige ihrer Funktionen untersucht, als ich im Internet auf Light Painting oder Langzeitbelichtung gestoßen bin. Die meisten von uns werden die Grundform des Lightpaintings mit einem Foto in einer Stadt mit einer Straße gesehen haben