Turinys:
- 1 žingsnis: Techninės ir programinės įrangos reikalavimai
- 2 žingsnis: supraskite problemą
- 3 veiksmas: „STM32CubeMX“konfigūravimas
- 4 žingsnis: „Keil“programinės įrangos kūrimas
- 5 žingsnis: Išvada
Video: STM32CubeMX mygtukas nustoja veikti su pertraukimu: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Sveiki, šioje pamokoje aš pabandysiu pateikti savo paprastą sprendimą, kaip užkirsti kelią mygtukų atšokimui, o tai yra labai rimta problema. Internete yra daug vaizdo įrašų, kurie siūlo šios problemos sprendimą, tačiau nė vienas iš jų nėra skirtas išoriniam pertraukimui. Visuose šiuose vaizdo įrašuose mygtuko paspaudimas tikrinamas neefektyviu apklausos metodu. Taigi, pradėkime!
1 žingsnis: Techninės ir programinės įrangos reikalavimai
Techninės įrangos reikalavimai:
- STM32 ARM kūrimo lenta
- Kompiuteris
Programinės įrangos reikalavimai:
- STM32CubeMX
- Keil uVision5
2 žingsnis: supraskite problemą
Taigi, mes bandome rasti mygtukų atšokimo problemos sprendimą. Todėl mes turime suprasti problemą. Taigi, kai paspaudžiame mygtuką, jis turi būti priešinga būsenai. Pavyzdžiui, jei jis buvo AUKŠTAS, jis turi būti ŽEMAS, o jei ŽEMAS, tada jis turi būti AUKŠTAS. Tačiau tai ideali būsena (PROTEUS:)) Iš tikrųjų, kai paspaudžiame mygtuką, jis pradeda šokinėti tarp HIGH ir LOW, kol ateina į tuščiosios eigos būseną. Taigi, apsimeta, kad jis buvo kelis kartus paspaustas, o tai sukelia problemų. Taigi, ką turėtume daryti?
Čia noriu pažymėti, kad šiame pavyzdyje, norėdami aptikti mygtukų paspaudimą, naudosime išorinį pertraukimą. Taigi, aptikę mygtuko paspaudimą, turime palaukti šiek tiek laiko, pvz., 50 mS, kad pasiektume tuščiosios eigos būseną, ir dar kartą patikrinti, ar mygtukas yra laukimo būsenos, ar ne. Jei jis neveikia, galime tęsti savo užduotį. Taigi pažiūrėkime kodą:)
3 veiksmas: „STM32CubeMX“konfigūravimas
Taigi, pirmiausia turime įjungti išorinį mūsų mygtuko pertraukimą (čia manau, kad naudojate STM32F407VG atradimo plokštę):
- Skirtuke „Pinout & Configuration“spustelėkite kaištį PA0, prijungtą prie mygtuko, ir pasirinkite GPIO_EXTI0, kuris įgalina išorinį to kaiščio pertraukimą.
- Pakeiskite kaiščio „vartotojo etiketę“į „Push_Button“arba bet ką, ko norite.
Tada turime sukonfigūruoti laikmatį, kad sukurtume 50 mS laiko uždelsimą:
- Įveskite skyrių „Laikmačiai“
- Spustelėkite TIM1
- Pasirinkite „Vidinis laikrodis“kaip laikrodžio šaltinį
-
Konfigūracijoje (jei norite suprasti šį skyrių, skaitykite šią mokymo programą, labai rekomenduojama „Servo variklio valdymas su STM32F4 ARM MCU“):
- Nustatykite prescaler kaip 32000
- Ir prieš 50
- Skirtuke „NVIC nustatymai“įjunkite visus pertraukimus
Įjungti LED kaip išvestį:
Spustelėkite PD12 ir nustatykite kaip „GPIO_Output“
Tada sukonfigūruokite laikrodį, kaip parodyta aukščiau esančiame paveikslėlyje, ir sugeneruokite kodą.
4 žingsnis: „Keil“programinės įrangos kūrimas
Pirma, mes apibrėžiame būsenos kintamąjį, kuris užtikrins, kad nepaleisime laikmačio išorinio pertraukimo metu, kai atsitiko:
/ * NAUDOTOJO KODAS PRADĖJA PFP */bool state = true; / * NAUDOTOJO KODAS PABAIGA PFP */
Tada mes rašome ISR išoriniam pertraukimui:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); būsena = klaidinga; } dar {_NOP (); }}
Kai paspaudžiamas mygtukas, patikriname, ar tai buvo mūsų apibrėžtas mygtukas, ir ar būsena teisinga. Pradžioje būsena bus teisinga, kad įvestų teiginį „if“. Įėję įjungiame laikmatį ir nustatome būseną klaidingą, kad užtikrintume, jog atšokęs laikmatis nebus paleistas iš naujo.
Tada užrašome ISR, kad būtų nutrauktas laikmatis:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Neleisti nepanaudotų argumentų (-ų) kompiliavimo įspėjimo * / UNUSED (htim);
/* PASTABA: šios funkcijos negalima keisti, kai reikia atgalinio ryšio, „HAL_TIM_PeriodElapsedCallback“būtų galima įdiegti vartotojo faile */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin_ GPPIN_12; būsena = tiesa; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * NAUDOTOJO KODAS PABAIGA 4 */
Po 50 ms patikriname, ar mygtukas dar yra atstatytas arba atleistas, jei taip, tada žinome, kad mygtukas yra laukimo būsenoje. Tada perjungiame šviesos diodą, padarome būseną teisingą, kad galėtume aptikti kitą mygtuko paspaudimo ir sustabdymo laikmatį, kad galėtume jį vėl paleisti.
Taigi šis procesas užtikrins, kad išvengsime atšokimo problemos.
5 žingsnis: Išvada
Tai buvo mygtuko išjungimo kodas. Noriu pastebėti, kad šį kodą sukūriau aš ir nesu programuotojas ekspertas. Taigi, klaidų tikrai gali būti. Jei turite geresnį sprendimą, atkreipkite dėmesį. Nepamirškite, jei susidursite su kokia nors problema, parašykite man ir aš pasistengsiu padėti.
Rekomenduojamas:
Kaip priversti „Windows 10“veikti „Raspberry Pi“: 3 žingsniai
Kaip priversti „Windows 10“dirbti su „Raspberry Pi“: priversti „Windows 10“veikti su „Raspberry Pi“gali šiek tiek varginti, tačiau šis vadovas išspręs visas su „Raspberry Pi“susijusias „Windows 10“problemas
Priverskite „CASIO“klaviatūrą veikti „Power Bank“: 8 žingsniai (su paveikslėliais)
Priverskite „CASIO“klaviatūrą veikti „Power Bank“: turiu seną „CASIO CT-636“, kuris veikia su 9 V adapteriu arba 6 D dydžio baterijomis. Komplekte nėra adapterio, jį turite pateikti ir įsitikinti, kad jis gali persijungti į neigiamą vidų, teigiamą išorę-tai yra senas statinės jac standartas
„DragonBoard 410c“- kaip veikti mažo greičio išplėtimui: 8 žingsniai
„DragonBoard 410c“- kaip veikti mažo greičio išplėtimui: ši pamoka skirta „DragonBoard 410c“mažo greičio išplėtimui. „DragonBoard 410c“mažo greičio išplėtimo įėjimai ir išėjimai (I/O) yra šie: GPIO (bendrosios paskirties įvestis/išvestis); MPP (daugiafunkcinis kaištis); SPI (nuosekli periferinė sąsaja); I2C (
„Super Ghetto“maitinimo mygtukas „Oneplus One“(turėtų veikti bet ką): 3 žingsniai
„Super Ghetto“maitinimo mygtukas „Oneplus One“(turėtų veikti bet kur): Problema: Visi mano telefono mygtukai yra sugedę. Jų pakeitimas yra tik laikinas sprendimas, nes mano galinis dangtelis yra sulaužytas ir niekur nerandu tokio pakeitimo, kuris neviršytų naudoto OPO kainos, tačiau supratau, kodėl neatnaujinus, jei aš
Priverskite „Garmin“transporto priemonės maitinimo kabelį vėl veikti: 7 žingsniai
Priverskite „Garmin“transporto priemonės maitinimo kabelį vėl veikti: tai yra „Garmin“GPS automobiliui. Cigarečių žiebtuvėlio nuolatinės srovės maitinimo šaltinį pastaraisiais metais „Garmin“naudojo daugelyje modelių ir vis dar naudojamas. Mūsų bjaurus įprotis atsiskiria taip, kad saugiklis ir centrinis kaištis susideda