Tartalomjegyzék:
- 1. lépés: Hardver- és szoftverkövetelmények
- 2. lépés: A probléma megértése
- 3. lépés: STM32CubeMX konfiguráció
- 4. lépés: Keil szoftverfejlesztés
- 5. lépés: Következtetés
Videó: Az STM32CubeMX gomb visszakapcsolása megszakítással: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Szia, ebben az oktatóanyagban megpróbálok egyszerű megoldást adni a gombok visszapattanásának megakadályozására, ami nagyon komoly probléma. Az interneten sok videó kínál megoldást erre a problémára, de egyik sem külső megszakításra. Mindezekben a videókban a gombnyomást nem hatékony lekérdezési módszerrel ellenőrzik. Szóval, kezdjük!
1. lépés: Hardver- és szoftverkövetelmények
Hardverkövetelmények:
- STM32 ARM fejlesztő tábla
- Egy számítógép
Szoftverkövetelmények:
- STM32CubeMX
- Keil uVision5
2. lépés: A probléma megértése
Tehát megpróbálunk megoldást találni a gombok visszapattanásának problémájára. Ezért meg kell értenünk a kérdést. Tehát, amikor megnyomunk egy gombot, olyan állapotba kell kerülnie, amely ellentétes az előző állapotával. Például, ha MAGAS volt, akkor LOW -nak kell lennie, és ha LOW -nak, akkor HIGH -nak. Ez azonban ideális állapot (a PROTEUS -ban:)) A valóságban, amikor megnyomunk egy gombot, akkor elkezd ugrálni a HIGH és LOW között, mielőtt tétlen állapotba kerülne. Tehát úgy tesz, mintha többször megnyomták volna, ami problémákat okoz. Tehát mit kell tennünk?
Itt szeretném megjegyezni, hogy ebben a példában külső megszakítást fogunk használni a gombnyomások észleléséhez. Tehát, miután észleltük a gombnyomást, várnunk kell egy kis időt, például 50 mS, hogy elérjük az üresjáratot, és újra ellenőrizni kell, hogy a gomb készenléti állapotban van -e vagy sem. Ha készenléti állapotban van, folytathatjuk a feladatunkat. Akkor nézzük a kódot:)
3. lépés: STM32CubeMX konfiguráció
Tehát először engedélyeznünk kell a külső megszakítást a nyomógombunkhoz (itt feltételezem, hogy az STM32F407VG felfedezőlapot használja):
- A "Pinout & Configuration" lapon kattintson a PA0 csapra, amely a nyomógombhoz van csatlakoztatva, és válassza a GPIO_EXTI0 lehetőséget, amely lehetővé teszi a külső megszakítást a tűn.
- Változtassa meg a csap "felhasználói címkéjét" "Push_Button" -ra vagy bármi másra.
Ezután be kell állítanunk az időzítőt 50 mS késleltetés létrehozásához:
- Lépjen be az "Időzítők" szakaszba
- Kattintson a TIM1 gombra
- Válassza ki a "Belső óra" lehetőséget óraforrásként
-
Konfigurációban (Ha szeretné megérteni ezt a részt, nézze meg ezt az oktatóanyagot, erősen ajánlott "Szervo motorvezérlés STM32F4 ARM MCU -val"):
- Állítsa az előskálázót 32000 -re
- És ellenpont az 50 -ig
- Az "NVIC beállítások" lapon engedélyezze az összes megszakítást
A LED engedélyezése kimenetként:
Kattintson a PD12 elemre, és állítsa "GPIO_Output" értékre
Ezután konfigurálja az órát a fenti képen látható módon, és generálja a kódot.
4. lépés: Keil szoftverfejlesztés
Először definiáljuk az állapotváltozót, amely biztosítja, hogy ne indítsuk el az időzítőt a külső megszakításon belül, amikor ugrálás történt:
/ * A FELHASZNÁLÓI KÓD ELKEZDIK PFP */bool state = true; / * FELHASZNÁLÓI KÓD VÉGE PFP */
Ezután ISR -t írunk a külső megszakításhoz:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); állapot = hamis; } else {_NOP (); }}
Amikor megnyomjuk a gombot, ellenőrizzük, hogy ez volt -e a meghatározott nyomógombunk, és hogy az állapot igaz -e. Kezdetben az állapot igaz lesz az if utasítás megadásához. Belépés után elindítjuk az időzítőt, és hamis állapotot állítunk be annak érdekében, hogy az ugrálás ne indítsa újra az időzítőt.
Ezután ISR -t írunk az időzítő megszakításhoz:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Megakadályozza a nem használt argumentum (ok) összeállítási figyelmeztetést * / UNUSED (htim);
/* MEGJEGYZÉS: Ezt a funkciót nem szabad módosítani, ha visszahívásra van szükség, a HAL_TIM_PeriodElapsedCallback megvalósítható a felhasználói fájlban */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin_ állapot = igaz; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * FELHASZNÁLÓI KÓD VÉGE 4 */
50 ms után ellenőrizzük, hogy a gomb még visszaállított állapotban van -e, vagy elengedve, ha igen, akkor tudjuk, hogy a gomb tétlen állapotban van. Ezután átkapcsoljuk a LED -et, és az állapotot igazá tesszük, hogy felismerhessük az újabb gombnyomást és az időzítőt, hogy újra elindíthassuk.
Tehát ez a folyamat biztosítja, hogy megakadályozzuk a pattogó problémákat.
5. lépés: Következtetés
Ez a gomb lekapcsolásának kódja volt. Szeretném megjegyezni, hogy ezt a kódot én fejlesztettem ki, és nem vagyok szakértő programozó. Tehát biztosan lehetnek hibák. Ha van jobb megoldása, jegyezze meg. Ne felejtse el, ha bármilyen probléma merül fel, írjon nekem, és megpróbálok segíteni.
Ajánlott:
Microsoft Teams némítás gomb: 4 lépés
Microsoft Teams némító gomb: Készítsen egy könnyen elérhető nyomógombot a némításhoz/némítás feloldásához Microsoft Teams hívás közben! Mivel 2020. Ez a projekt egy Adafruit Circuit Playground Express (CPX) és egy nagy nyomógombot használ a gyorsbillentyűvel a Microsoft Teams némító gombjának létrehozásához
$ 5 otthoni automatizálás gomb: 4 lépés
5 dolláros otthoni automatizálás gomb: 5 dolláros otthoni automatizálás gomb Néha a legegyszerűbb megoldás egyetlen gomb. Szerettünk volna egy egyszerű módot arra, hogy elindítsunk egy „lefekvés előtti” rutint az otthoni automatizálási központunkban (a Hubitat Elevation), amely kikapcsolja a legtöbb fényt, másokat meghatározott szintekre állít, és
Kikapcsoló gomb a Raspberry Pi számára: 3 lépés
Kikapcsolási gomb a Raspberry Pi számára: A Raspberry Pi egy nagyon hasznos számítási platform, amely lehetővé teszi különféle IoT/robotika/intelligens otthon/… projektalkalmazások létrehozását. Az egyetlen dolog azonban nincs benne, összehasonlítva egy normál számítógéppel, a kikapcsolás gomb. Tehát hogyan tudunk létrehozni
Forgó kódoló gomb: 6 lépés
Rotációs kódoló gomb: Ez egy forgó távirányító, amely forgó kódolón alapul. A következő tulajdonságokkal rendelkezik. Az akkumulátor nagyon alacsony áramfogyasztással működik, amikor aktiválva van. Automatikus aktiválás, amikor a vezérlő el van forgatva
Lábvezérelt push -talk gomb: 5 lépés
Lábvezérelt push -talk gomb: Így készítettem egy push -talk gombot, amelyet a lábával is használhat