Sadržaj:
- Korak 1: Hardverski i softverski zahtjevi
- Korak 2: Razumijevanje problema
- Korak 3: Konfiguracija STM32CubeMX
- Korak 4: Razvoj softvera Keil
- Korak 5: Zaključak
Video: Debounce dugmeta STM32CubeMX sa prekidom: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Bok, u ovom vodiču pokušat ću dati svoje jednostavno rješenje za sprječavanje odskakivanja gumba što je vrlo ozbiljan problem. Na internetu postoji mnogo videozapisa koji nude rješenje za ovaj problem, ali nema njih za vanjske prekide. U svim ovim video zapisima pritisak na dugme se provjerava metodom anketiranja koja je neefikasna. Dakle, počnimo!
Korak 1: Hardverski i softverski zahtjevi
Hardverski zahtjevi:
- STM32 ARM razvojna ploča
- Kompjuter
Softverski zahtjevi:
- STM32CubeMX
- Keil uVision5
Korak 2: Razumijevanje problema
Stoga pokušavamo pronaći rješenje za problem odskakivanja gumba. Stoga moramo razumjeti problem. Dakle, kada pritisnemo dugme, ono bi trebalo doći u stanje koje je suprotno od prethodnog stanja. Na primjer, ako je bilo VISOKO, mora biti NISKO, a ako je bilo NISKO, onda mora biti VISOKO. Međutim, ovo je idealno stanje (u PROTEUS -u:)) U stvarnosti, kada pritisnemo dugme, ono počinje poskakivati između HIGH i LOW prije nego što dođe u stanje mirovanja. Dakle, pretvara se da je pritisnut nekoliko puta što uzrokuje probleme. Dakle, šta bismo trebali učiniti?
Ovdje želim napomenuti da ćemo u ovom primjeru koristiti vanjski prekid kako bismo otkrili pritiskanje tipke. Dakle, nakon što otkrijemo pritisak na dugme, moramo sačekati malo vremena, na primjer 50mS da bismo dosegli stanje mirovanja i ponovo provjeriti je li dugme u stanju mirovanja ili ne. Ako je u stanju mirovanja, možemo nastaviti sa svojim zadatkom. Pa da vidimo kod:)
Korak 3: Konfiguracija STM32CubeMX
Dakle, prvo moramo omogućiti vanjski prekid za naše dugme (ovdje pretpostavljam da koristite ploču za otkrivanje STM32F407VG):
- Na kartici "Pinout & Configuration" kliknite na pin PA0 koji je spojen na gumb i odaberite GPIO_EXTI0 koji omogućuje vanjski prekid na tom pinu.
- Promijenite "korisničku oznaku" igle u "Push_Button" ili bilo šta što želite.
Zatim moramo konfigurirati mjerač vremena kako bismo stvorili odgodu od 50 mS:
- Unesite odjeljak "Tajmeri"
- Kliknite na TIM1
- Odaberite "Interni sat" kao izvor sata
-
U konfiguraciji (Ako želite razumjeti ovaj odjeljak, pogledajte ovaj vodič, visoko preporučena "Kontrola servo motora sa STM32F4 ARM MCU"):
- Podkaler postavite na 32000
- I period brojača do 50
- Na kartici "NVIC Settings" omogućite sve prekide
Omogući LED kao izlaz:
Kliknite na PD12 i postavite kao "GPIO_Output"
Zatim konfigurirajte sat kao na gornjoj slici i generirajte kod.
Korak 4: Razvoj softvera Keil
Prvo definiramo varijablu stanja koja će osigurati da ne pokrećemo tajmer unutar vanjskog prekida kada se odskok dogodio:
/ * KORISNIČKI KOD POČINJE PFP */bool stanje = true; / * KORISNIČKI KOD KRAJ PFP */
Zatim pišemo ISR za vanjski prekid:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); stanje = netačno; } else {_NOP (); }}
Kada pritisnemo dugme, provjeravamo je li to bilo naše definirano dugme i je li stanje tačno. Na početku će stanje biti tačno za unos if naredbe. Nakon ulaska pokrećemo mjerač vremena i postavljamo stanje lažno kako bismo bili sigurni da se odskakanje neće ponovo pokrenuti.
Zatim pišemo ISR za prekid timera:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Spriječi upozorenje kompilacije neiskorištenih argumenata * / UNUSED (htim);
/* NAPOMENA: Ova funkcija se ne smije mijenjati, kada je potreban povratni poziv, HAL_TIM_PeriodElapsedCallback bi se mogao implementirati u korisničku datoteku */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD_ GPIO_); stanje = tačno; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * KORISNIČKI KOD KRAJ 4 */
Nakon 50mS provjeravamo je li gumb još uvijek u resetiranom stanju ili otpušten, ako da, onda znamo da je to dugme u stanju mirovanja. Zatim prebacimo LED diodu, učinimo stanje istinitim kako bismo mogli otkriti još jedno pritiskanje tipke i zaustaviti mjerač vremena kako bismo ga mogli ponovo pokrenuti.
Dakle, ovaj proces će osigurati da spriječimo problem poskakivanja.
Korak 5: Zaključak
Ovo je bio kod za debounce dugmeta. Želim napomenuti da sam ovaj kod razvio ja i da nisam stručan programer. Dakle, grešaka sigurno može biti. Zapamtite ako imate bolje rješenje. Ne zaboravite, ako naiđete na bilo koji problem, pišite mi i ja ću vam pokušati pomoći.
Preporučuje se:
Relejni prekidač sa dva dugmeta: 3 koraka
Relejni prekidač sa dva dugmeta: Ovaj članak prikazuje kako uključiti i isključiti prekidač sa pritiskom na dugme. Ovo kolo se može obaviti sa dva prekidača. Pritisnete jedan prekidač i sijalica se UKLJUČI. Pritisnete drugi prekidač i žarulja se isključuje. Međutim, ovaj Ins
Brojač pomoću dugmeta - Tinker Cad: 3 koraka
Brojač pomoću dugmeta | Tinker Cad: Nakon što pritisnete dugme, često želite da izvršite neku radnju na osnovu toga koliko puta je dugme pritisnuto. Da biste to učinili, morate znati kada dugme promijeni stanje iz isključenog u uključeno i izbrojiti koliko se puta ta promjena stanja dogodi. Th
Moj pokušaj melodije zujalice dugmeta Arduino: 11 koraka
Moj pokušaj melodije zujalice dugmeta Arduino: U ovom vodiču ću vam pokazati kako dugme može pokrenuti melodiju. Tokom školske godine mnoge naše živote vode zvona ili tonovi koji nam daju do znanja kada je vrijeme za polazak ili vrijeme za polazak. Većina nas rijetko zastaje i razmišlja o tome kako se razlikuju
Hakiranje dugmeta za vrata jubilarne linije londonskog podzemlja: 12 koraka (sa slikama)
Hakiranje dugmeta za vrata jubilarne linije londonskog podzemlja: Londonski transportni muzej prodaje raskinute dugmad na vratima sa linije Jubilee (dostupna su i lijeva i desna strana). Ako razmišljate o izvođenju projekta za koji je potrebno dugme i neka vrsta indikatora, bili biste
Nečujno zvono na vratima dugmeta Amazon Dash Button: 10 koraka (sa slikama)
Amazon Dash Button Tiho zvono na vratima: Stalno gledate kroz prozor kako biste mogli presresti posjetitelje prije nego što pozvone na vrata? Umorni ste od toga da psi i beba polude kad god zazvoni? Ne želite potrošiti bogatstvo na "pametnog" rešenje? Nečujno zvono na vratima je isto kao