Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-23 14:47
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 videozapisima pritisak na gumb provjerava se metodom prozivanja koja je neučinkovita. Dakle, počnimo!
Korak 1: Zahtjevi hardvera i softvera
Hardverski zahtjevi:
- Razvojna ploča STM32 ARM
- Računalo
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 gumb, 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 gumb, ono počinje poskakivati između VISOKOG i NISKOG prije nego dođe u stanje mirovanja. Dakle, pretvara se da je pritisnut nekoliko puta što uzrokuje probleme. Dakle, što bismo trebali učiniti?
Ovdje želim napomenuti da ćemo u ovom primjeru koristiti vanjski prekid kako bismo detektirali pritisak gumba. Dakle, nakon što otkrijemo pritisak gumba, moramo pričekati malo vremena, na primjer 50mS kako bismo dosegli stanje mirovanja i ponovno provjerili je li gumb 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š gumb (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 sve što želite.
Zatim moramo konfigurirati mjerač vremena kako bismo stvorili odgodu od 50 ms:
- Uđite u odjeljak "Odbrojavanje vremena"
- Kliknite na TIM1
- Odaberite "Interni sat" kao izvor sata
-
U konfiguraciji (Ako želite razumjeti ovaj odjeljak, pogledajte ovaj vodič, visoko preporučena "Upravljanje servo motorom sa STM32F4 ARM MCU"):
- Predskaler postavite na 32000
- I razdoblje brojača do 50
- Na kartici "NVIC Settings" omogućite sve prekide
Omogući LED kao izlaz:
Pritisnite PD12 i postavite kao "GPIO_Output"
Zatim konfigurirajte sat kao na gornjoj slici i generirajte kôd.
Korak 4: Razvoj softvera Keil
Prvo definiramo varijablu stanja koja će osigurati da ne pokrećemo mjerač vremena 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 = lažno; } else {_NOP (); }}
Kad pritisnemo gumb, provjeravamo je li to bio naš definirani gumb i je li stanje istinito. Na početku će stanje biti točno kako biste unijeli if naredbu. Nakon unosa pokrećemo mjerač vremena i postavljamo stanje lažno kako bismo bili sigurni da se odskakanje neće ponovno pokrenuti.
Zatim pišemo ISR za prekid timera:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Sprječavanje upozorenja kompilacije neiskorištenih argumenata * / UNUSED (htim);
/* NAPOMENA: Ova funkcija se ne smije mijenjati, kada je potreban povratni poziv, HAL_TIM_PeriodElapsedCallback mogao bi se 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 = istina; 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 gumb u stanju mirovanja. Zatim prebacimo LED diodu, učinimo stanje istinitim kako bismo mogli otkriti još jedan pritisak gumba i zaustaviti mjerač vremena kako bismo ga mogli ponovno pokrenuti.
Dakle, ovaj će postupak osigurati da spriječimo problem poskakivanja.
Korak 5: Zaključak
Ovo je bio kôd za otkazivanje gumba. Želim napomenuti da sam ovaj kod razvio ja i da nisam stručan programer. Dakle, greške sigurno može biti. Ako imate bolje rješenje, zabilježite ga. Ne zaboravite, ako naiđete na bilo koji problem, pišite mi i pokušat ću vam pomoći.
Preporučeni:
Odvajanje Amazon Echo: 6 koraka
Razdvajanje Amazon Echo -a: Ako ste poput mene, NE MOŽETE rastavljati stvari i petljati s tim. Moj je cilj napraviti najinformativniji vodič na internetu za sigurno rastavljanje vašeg Amazon Echo -a. Kad sam svoj prvi put rastavio, nisam imao gotovo nikakve upute ili
Obrada slike s Raspberry Pi: Instaliranje OpenCV -a i odvajanje boja slike: 4 koraka
Obrada slike s Raspberry Pi: Instaliranje OpenCV -a i odvajanje boja u boji: Ovaj je post prvi od nekoliko vodiča za obradu slika koji slijede. Pomnije promatramo piksele koji čine sliku, učimo kako instalirati OpenCV na Raspberry Pi, a također pišemo i testne skripte za snimanje slike, a također i c
Odvajanje mono pjesme na stereo u Audacity: 5 koraka
Dijeljenje mono pjesme na stereo u Audacityju: Imate li mono zvučni zapis koji želite vidjeti kao stereo u Audacityju? Zatim čitajte dalje kako biste saznali kako podijeliti mono zvučne zapise u stereo
Odvajanje stolnog tvrdog diska za dobivanje magneta od rijetke zemlje .: 8 koraka
Izvlačenje stolnog tvrdog diska za dobivanje magneta rijetkih zemalja: U ovom uputstvu pokazat ću vam korake za odvajanje tvrdog diska računala i dobivanje magneta od rijetkih zemalja s njega
Odvajanje nasumične reprodukcije IPoda druge generacije: 3 koraka
Rastavljanje IPod nasumične reprodukcije druge generacije: Evo potpunog opisa kako rastaviti jedan od novih iPod Shuffleova. Bit će vam mali odvijač s Philipovom glavom i nešto tanko i oštro, poput igle