Indholdsfortegnelse:
- Trin 1: Krav til hardware og software
- Trin 2: Forståelse af problemet
- Trin 3: STM32CubeMX -konfiguration
- Trin 4: Keil softwareudvikling
- Trin 5: Konklusion
Video: STM32CubeMX -knappen afbrydes med afbrydelse: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Hej, i denne vejledning vil jeg prøve at give min enkle løsning for at forhindre knapstød, hvilket er et meget alvorligt problem. På internettet er der mange videoer til løsning af dette problem, men ikke dem til ekstern afbrydelse. I alle disse videoer kontrolleres knappetryk ved afstemningsmetode, som er ineffektiv. Så lad os starte!
Trin 1: Krav til hardware og software
Hardware krav:
- STM32 ARM udviklingstavle
- En computer
Softwarekrav:
- STM32CubeMX
- Keil uVision5
Trin 2: Forståelse af problemet
Så vi forsøger at finde en løsning på problem med knapstoppning. Derfor er vi nødt til at forstå spørgsmålet. Så når vi trykker på en knap, skal den komme i en tilstand, der er modsat dens tidligere tilstand. For eksempel, hvis det var HIGH, skal det være LOW, og hvis det var LOW, skal det være HIGH. Dette er imidlertid en ideel tilstand (i PROTEUS:)) I virkeligheden, når vi trykker på en knap, begynder den at hoppe mellem HIGH og LOW, før den kommer til inaktiv tilstand. Så foregiver, at det er blevet trykket flere gange, hvilket forårsager problemer. Så hvad skal vi gøre?
Her vil jeg bemærke, at vi i dette eksempel vil bruge ekstern afbrydelse for at opdage knaptryk. Så efter at vi har opdaget et tryk på knappen, skal vi vente lidt tid, f.eks. 50 ms for at nå inaktiv tilstand og kontrollere igen, om knappen er inaktiv eller ej. Hvis den er i inaktiv tilstand, kan vi fortsætte med vores opgave. Så lad os se koden:)
Trin 3: STM32CubeMX -konfiguration
Så vi skal først aktivere ekstern afbrydelse for vores trykknap (jeg formoder her, at du bruger STM32F407VG discovery board):
- I fanen "Pinout & Configuration" klikker du på pin PA0, der er forbundet til trykknappen, og vælger GPIO_EXTI0, som muliggør ekstern afbrydelse på den pin.
- Skift "brugermærket" på stiften til "Push_Button" eller noget, du ønsker.
Derefter skal vi konfigurere timeren for at oprette en forsinkelse på 50 ms:
- Gå ind i afsnittet "Timere"
- Klik på TIM1
- Vælg "Intern ur" som urkilde
-
I konfiguration (Hvis du vil forstå dette afsnit, henvises til denne vejledning, stærkt anbefalet "Servomotorstyring med STM32F4 ARM MCU"):
- Indstil prescaler til 32000
- Og kontra periode til 50
- Aktiver alle afbrydelser under fanen "NVIC -indstillinger"
Aktiver LED som output:
Klik på PD12 og indstil som "GPIO_Output"
Konfigurer derefter uret som på billedet ovenfor, og generer koden.
Trin 4: Keil softwareudvikling
Først definerer vi tilstandsvariabel, som sikrer, at vi ikke starter timeren inde i ekstern afbrydelse, når studsningen skete:
/ * BRUGERKODE BEGYNDER PFP */bool -tilstand = sand; / * BRUGERKODE END PFP */
Derefter skriver vi ISR for ekstern afbrydelse:
ugyldig HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); tilstand = falsk; } andet {_NOP (); }}
Når der blev trykket på knappen, kontrollerer vi, om det var vores definerede trykknap, og om tilstanden er sand. I begyndelsen vil staten være sand for at indtaste if -sætningen. Efter indtastning starter vi timeren og gør tilstanden falsk for at sikre, at afvisning ikke genstarter timeren.
Derefter skriver vi ISR for timerafbrydelse:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Forhindrer ubrugte argument (er) om kompilationsadvarsel * / UBRUGT (htim);
/* BEMÆRK: Denne funktion bør ikke ændres, når der er behov for tilbagekald, HAL_TIM_PeriodElapsedCallback kunne implementeres i brugerfilen */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_); tilstand = sand; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * BRUGERKODE SLUT 4 */
Efter 50 ms kontrollerer vi, om knappen endnu er i nulstillingstilstand eller frigivet, hvis ja, ved vi, at knappen er i inaktiv tilstand. Derefter skifter vi LED'en, gør tilstanden sand for at kunne registrere endnu et tryk på knappen og stoppe timeren for at kunne starte den igen.
Så denne proces vil sikre, at vi forhindrer problemer med at hoppe.
Trin 5: Konklusion
Dette var kode for knapdebounce. Jeg vil bemærke, at denne kode blev udviklet af mig, og jeg er ikke en ekspert programmerer. Så der kan helt sikkert være fejl. Hvis du har en bedre løsning, bemærk det. Glem ikke, hvis du støder på et problem, så skriv til mig, og jeg vil prøve at hjælpe.
Anbefalede:
STM32CubeMx mikrofon (STM32F407VG): 5 trin
STM32CubeMx mikrofon (STM32F407VG): Hej! I dette projekt vil vi prøve at få lyd ved hjælp af mikrofon (ekstern ikke indbygget mikrofon) og afspille den via højttaler. Denne vejledning vil være meget kort, da jeg vil give forklaringer på projektdele med henvisning til nogle videoer. Så lad os springe
STM32L100 Blink LED ved hjælp af Atollic TrueSTUDIO og STM32CubeMX: 5 trin
STM32L100 Blink LED ved hjælp af Atollic TrueSTUDIO og STM32CubeMX: I dette projekt vil jeg fortælle dig, hvordan du blinker en LED ved hjælp af 32L100discovery. Så her vil jeg fortælle dig om arbejdsprincippet for denne blinkled -tutorial også, hvilken type software og hardware du har brug for
STM32F4 Discovery Board og Python USART Communication (STM32CubeMx): 5 trin
STM32F4 Discovery Board og Python USART Communication (STM32CubeMx): Hej! I denne vejledning vil vi forsøge at etablere USART -kommunikation mellem STM32F4 ARM MCU og Python (den kan erstattes af ethvert andet sprog). Så lad os komme i gang
Arduino - Periodisk afbrydelse: 4 trin
Arduino - Periodisk afbrydelse: Denne instruks handler om at bruge en periodisk afbrydelse til timing i Arduino -programmer. Dette er et skridt for en spirende Arduino -programmør, der ved, at Arduino kan mere, men ikke helt ved, hvordan det skal ske. Hvis der er en præstation pr
DIY batteriniveauindikator/automatisk afbrydelse til 12v batteri: 5 trin (med billeder)
DIY -batteriniveauindikator/automatisk afbrydelse til 12v batteri: DIYere … Vi har alle været igennem situationen, da vores high -end -opladere har travlt med at oplade disse lithiumpolymerbatterier, men du skal stadig oplade det 12v blybatteri og den eneste oplader, du got er en blind …. Ja en blind sådan