INHOUDSOPGAWE:
- Stap 1: Vereistes vir hardeware en sagteware
- Stap 2: Verstaan die probleem
- Stap 3: STM32CubeMX -opset
- Stap 4: Keil sagteware -ontwikkeling
- Stap 5: Gevolgtrekking
Video: STM32CubeMX -knoppie ontkoppel met onderbreking: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Hallo, in hierdie tutoriaal sal ek probeer om my eenvoudige oplossing te gee om knoppies te voorkom, wat 'n baie ernstige probleem is. Op die internet is daar baie video's om hierdie probleem op te los, maar nie een vir eksterne onderbrekings nie. In al hierdie video's word die druk op die knoppie gekontroleer volgens die peilingsmetode, wat ondoeltreffend is. So, laat ons begin!
Stap 1: Vereistes vir hardeware en sagteware
Hardeware vereistes:
- STM32 ARM ontwikkelingsbord
- N rekenaar
Sagteware vereistes:
- STM32CubeMX
- Keil uVision5
Stap 2: Verstaan die probleem
Ons probeer dus 'n oplossing vind vir die probleem met die weerkaatsing van knoppies. Daarom moet ons die kwessie verstaan. Dus, as ons op 'n knoppie druk, behoort dit 'n toestand te kry wat teenoor sy vorige toestand is. Byvoorbeeld, as dit HOOG was, moet dit LAAG wees en as dit LAAG is, moet dit HOOG wees. Dit is egter 'n ideale toestand (in PROTEUS:)) In werklikheid, as ons op 'n knoppie druk, begin dit weerkaats tussen HOOG en LAAG voordat dit in 'n ledige toestand kom. Dus, maak asof dit 'n paar keer ingedruk is, wat probleme veroorsaak. So, wat moet ons doen?
Hier wil ek daarop let dat ons in hierdie voorbeeld 'n eksterne onderbreking sal gebruik om die druk op die knoppie op te spoor. Dus, nadat ons die druk op die knoppie opgespoor het, moet ons 'n rukkie wag, soos 50mS, om die ledige toestand te bereik en weer te kontroleer of die knoppie in 'n ledige toestand is of nie. As dit in 'n ledige toestand is, kan ons voortgaan met ons taak. So, laat ons die kode sien:)
Stap 3: STM32CubeMX -opset
Ons moet dus 'n eksterne onderbreking vir ons drukknoppie aktiveer (ek neem hier aan dat u STM32F407VG -ontdekkingsbord gebruik):
- Klik in die oortjie "Pinout & Configuration" op pin PA0 wat aan die drukknoppie gekoppel is en kies GPIO_EXTI0 wat eksterne onderbreking op die pin moontlik maak.
- Verander die 'gebruikersetiket' van die pen in 'Push_Button' of enigiets wat u wil hê.
Dan moet ons die timer instel om 'n vertraging van 50 ms te skep:
- Voer die afdeling "Timers" in
- Klik op TIM1
- Kies 'Interne klok' as 'n klokbron
-
In opset (as u hierdie afdeling wil verstaan, raadpleeg hierdie tutoriaal, 'Servomotorbeheer met STM32F4 ARM MCU'):
- Stel prescaler as 32000 in
- En die tydperk teen 50
- Aktiveer alle onderbrekings op die oortjie "NVIC -instellings"
Aktiveer LED as uitset:
Klik op PD12 en stel dit in as "GPIO_Output"
Stel dan die klok op soos in die prent hierbo, en genereer die kode.
Stap 4: Keil sagteware -ontwikkeling
Eerstens definieer ons 'n staatsveranderlike wat sal verseker dat ons nie 'n timer in 'n eksterne onderbreking begin as 'n weerkaatsing plaasvind nie:
/ * USER CODE BEGIN PFP */bool state = true; / * GEBRUIKERSKODE EINDE PFP */
Dan skryf ons ISR vir eksterne onderbreking:
ongeldig HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); staat = vals; } anders {_NOP (); }}
As ons op die knoppie druk, kyk ons of dit ons gedefinieerde drukknoppie is en of die toestand waar is. Aan die begin is die toestand waar om die if -stelling in te voer. Nadat ons ingegaan het, begin ons die timer en maak die toestand onwaar om te verseker dat die weerkaatsing nie weer begin nie.
Dan skryf ons ISR vir timeronderbreking:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Voorkom ongebruikte argument (e) samestellingswaarskuwing * / ONGEBRUIKT (htim);
/* OPMERKING: hierdie funksie moet nie gewysig word as die terugbel nodig is nie, die HAL_TIM_PeriodElapsedCallback kan geïmplementeer word in die gebruikerslêer */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_; staat = waar; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * GEBRUIKERSKODE EINDE 4 */
Na 50mS kyk ons of die knoppie nog in 'n hersteltoestand is of vrygestel is, en indien wel, weet ons dat die knoppie in 'n ledige toestand is. Dan skakel ons die LED, maak die toestand waar om 'n ander druk op die knoppie te kan opspoor en stop die timer om dit weer te kan begin.
Hierdie proses sal dus verseker dat ons nie weerkaatsing voorkom nie.
Stap 5: Gevolgtrekking
Dit was 'n kode vir knoppie -ontbinding. Ek wil daarop let dat hierdie kode deur my ontwikkel is en dat ek nie 'n kundige programmeerder is nie. Daar kan dus foute wees. Let op as u 'n beter oplossing het. Moenie vergeet nie, as u 'n probleem ondervind, skryf dit aan my, en ek sal probeer om te help.
Aanbeveel:
Hoe om 'n Xbox -afstandbeheer te herstel - Ontkoppel kondensatoroplossing: 4 stappe (met foto's)
Hoe om 'n Xbox -afstandsbediening te herstel - Ontkoppel kondensatoroplossing: hierdie instruksie word geskryf in reaksie op 'n gebreekte Xbox -afstandbeheer. Die simptome is dat dit lyk asof die afstandsbediening reg is. As ek die afstandsbediening op 'n TV -ontvanger net vir toetsdoeleindes, ek kan 'n rooi LED op die ontvanger sien flikker
STM32CubeMx -mikrofoon (STM32F407VG): 5 stappe
STM32CubeMx -mikrofoon (STM32F407VG): Hallo! In hierdie projek sal ons probeer om klank te kry deur 'n mikrofoon te gebruik (ekstern nie aan boord nie) en dit deur die luidspreker speel. Hierdie tutoriaal sal baie kort wees, aangesien ek verduidelikings gee oor die onderdele van die projek aan die hand van sommige video's. So, laat ons spring
STM32L100 Knipper LED met behulp van Atollic TrueSTUDIO en STM32CubeMX: 5 stappe
STM32L100 Knipper LED met behulp van Atollic TrueSTUDIO en STM32CubeMX: In hierdie projek gaan ek u vertel hoe u 'n LED kan knip met 32L100 Discovery. So hier gaan ek u vertel oor die werkbeginsel vir hierdie blink geleide handleiding, ook watter tipe sagteware en hardeware u benodig
AVR -mikrobeheerder. Wissel LED's met 'n drukknopskakelaar. Drukknoppie ontkoppel: 4 stappe
AVR -mikrobeheerder. Wissel LED's met 'n drukknopskakelaar. Knoppie -ontbinding: in hierdie afdeling leer ons hoe om program C -kode vir ATMega328PU te maak om die status van die drie LED's te verander volgens die insette van 'n knoppieskakelaar. Ons het ook 'n oplossing vir die probleem van 'Switch Bounce' ondersoek. Soos gewoonlik, sal ons
Arduino - Periodieke onderbreking: 4 stappe
Arduino - Periodieke onderbreking: hierdie instruksie handel oor die gebruik van 'n periodieke onderbreking vir tydsberekening in Arduino -programme. Dit is 'n stap vir 'n ontluikende Arduino -programmeerder wat weet dat die Arduino meer kan doen, maar nie heeltemal weet hoe om dit te laat gebeur nie. As daar 'n optrede is