Përmbajtje:
- Hapi 1: Kërkesat për harduer dhe softuer
- Hapi 2: Kuptimi i problemit
- Hapi 3: Konfigurimi STM32CubeMX
- Hapi 4: Zhvillimi i softuerit Keil
- Hapi 5: Përfundimi
Video: Butoni STM32CubeMX Debounce With Interrupt: 5 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:19
Përshëndetje, në këtë tutorial do të përpiqem të jap zgjidhjen time të thjeshtë për të parandaluar kërcimin e butonit i cili është çështje shumë serioze. Në internet ka shumë video për të ofruar zgjidhje për këtë çështje, por asnjëra prej tyre për ndërprerje të jashtme. Në të gjitha këto video shtypja e butonit kontrollohet me metodën e votimit e cila është joefikase. Pra, le të fillojmë!
Hapi 1: Kërkesat për harduer dhe softuer
Kërkesat për harduerin:
- Bordi i zhvillimit STM32 ARM
- Një kompjuter
Kërkesat e softuerit:
- STM32CubeMX
- Keil uVision5
Hapi 2: Kuptimi i problemit
Pra, ne përpiqemi të gjejmë zgjidhje për problemin e kërcimit të butonave. Prandaj, ne duhet ta kuptojmë çështjen. Pra, kur shtypim një buton duhet të vijë një gjendje e kundërt me gjendjen e mëparshme. Për shembull, nëse ishte I LART duhet të jetë I ULOWT dhe nëse ishte I UL thenT atëherë duhet të jetë LART. Sidoqoftë, kjo është gjendja ideale (në PROTEUS:)) Në realitet, kur shtypim një buton fillon të kërcejë midis HIGH dhe LOW para se të vijë në gjendje boshe. Pra, pretendon se është shtypur disa herë gjë që shkakton probleme. Pra, çfarë duhet të bëjmë?
Këtu dua të vërej se në këtë shembull, ne do të përdorim ndërprerës të jashtëm për të zbuluar shtypjen e butonit. Pra, pasi të zbulojmë shtypjen e butonit, duhet të presim pak kohë, si 50mS në mënyrë që të arrijmë gjendjen boshe dhe të kontrollojmë përsëri nëse butoni është në gjendje boshe apo jo. Nëse është në gjendje boshe, atëherë mund të vazhdojmë me detyrën tonë. Pra, le të shohim kodin:)
Hapi 3: Konfigurimi STM32CubeMX
Pra, së pari duhet të aktivizojmë ndërprerjen e jashtme për butonin tonë të shtypjes (supozoj këtu që ju përdorni tabelën e zbulimit STM32F407VG):
- Në skedën "Pinout & Configuration" klikoni në pin PA0 e cila është e lidhur me butonin shtytës dhe zgjidhni GPIO_EXTI0 e cila mundëson ndërprerje të jashtme në atë pin.
- Ndryshoni "etiketën e përdoruesit" të kunjit në "Push_Button" ose gjithçka që dëshironi.
Pastaj, ne duhet të konfigurojmë kohëmatësin në mënyrë që të krijojmë një vonesë kohore 50mS:
- Shkruani seksionin "Kohëmatësit"
- Klikoni në TIM1
- Zgjidhni "Ora e Brendshme" si burim Orë
-
Në konfigurim (Nëse doni të kuptoni këtë seksion, ju lutemi referojuni këtij udhëzuesi, shumë të rekomanduar "Servo Motor Control With STM32F4 ARM MCU"):
- Vendosni parashkruesin si 32000
- Dhe periudha kundër 50
- Në skedën "Cilësimet NVIC" aktivizoni të gjitha ndërprerjet
Aktivizoni LED si dalje:
Klikoni në PD12 dhe vendoseni si "GPIO_Output"
Pastaj, konfiguroni orën si në imazhin e dhënë më sipër dhe gjeneroni kodin.
Hapi 4: Zhvillimi i softuerit Keil
Së pari, ne përcaktojmë ndryshoren e gjendjes e cila do të sigurojë që të mos fillojmë kohëmatësin brenda ndërprerjes së jashtme kur ka ndodhur kërcimi:
/ * KODI I PERRDORUESIT FILLON PFP */bool state = true; / * KODI I PERRDORIMIT P ENDR PFP */
Pastaj, ne shkruajmë ISR për ndërprerjen e jashtme:
pavlefshme HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && gjendja == e vërtetë) {HAL_TIM_Base_Start_IT (& htim1); gjendje = false; } tjetër {_NOP (); }}
Kur shtypet butoni ne kontrollojmë nëse ishte butoni ynë i përcaktuar dhe nëse gjendja është e vërtetë. Në fillim gjendja do të jetë e vërtetë për të futur deklaratën if. Pas hyrjes ne fillojmë kohëmatësin dhe e bëjmë gjendjen false në mënyrë që të sigurohemi që kërcimi nuk do të rifillojë kohëmatësin.
Pastaj, ne shkruajmë ISR për ndërprerjen e kohëmatësit:
i pavlefshëm HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Parandaloni paralajmërimin e përpilimit të argumenteve të papërdorur * / PUSRDORUAR (htim);
/* SHENIM: Ky funksion nuk duhet të modifikohet, kur nevojitet përgjigja në telefon, HAL_TIM_PeriodElapsedCallback mund të zbatohet në skedarin e përdoruesit */ nëse (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPI12); gjendja = e vërtetë; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * KODI I PERRDORIMIT FUND 4 *//
Pas 50mS ne kontrollojmë nëse butoni është akoma në gjendje të rivendosur apo i lëshuar, nëse po atëherë e dimë që ai buton është në gjendje boshe. Pastaj ne ndryshojmë led -in, e bëjmë gjendjen të vërtetë në mënyrë që të jemi në gjendje të zbulojmë një shtypje tjetër butoni dhe të ndalim kohëmatësin në mënyrë që të jemi në gjendje ta fillojmë përsëri.
Pra, ky proces do të sigurojë që ne të parandalojmë çështjen e kërcimit.
Hapi 5: Përfundimi
Ky ishte kodi për heqjen e butonit. Dua të vërej se ky kod është zhvilluar nga unë dhe nuk jam programues ekspert. Pra, me siguri mund të ketë gabime. Nëse keni një zgjidhje më të mirë, ju lutemi vini re atë. Mos harroni, nëse hasni ndonjë problem ju lutem më shkruani dhe unë do të përpiqem t'ju ndihmoj.
Recommended:
Butoni i heshtjes së ekipeve të Microsoft: 4 hapa
Butoni i heshtjes së ekipeve të Microsoft: Krijoni një buton të arritshëm për të heshtur/çaktivizuar veten gjatë një telefonate të Ekipeve të Microsoft! Për shkak të vitit 2020. Ky projekt përdor një Adafruit Circuit Playground Express (CPX) dhe një buton të madh për të krijuar një buton memec për Ekipet e Microsoft përmes tastit të nxehtë
Butoni i automatizimit të shtëpisë 5 dollarë: 4 hapa
Butoni i automatizimit të shtëpisë 5 dollarë: Një buton 5 dollarësh për automatizimin e shtëpisëNganjëherë zgjidhja më e thjeshtë është një buton i vetëm. Ne donim një mënyrë të lehtë për të shkaktuar një rutinë "para gjumit" në qendrën tonë të automatizimit të shtëpisë (Hubitat Elevation), e cila fik shumicën e dritave, vendos të tjerët në nivele të veçanta dhe
Butoni i fikjes për Raspberry Pi: 3 hapa
Butoni i fikjes për Raspberry Pi: Raspberry Pi është një platformë kompjuterike shumë e dobishme që lejon krijimin e aplikacioneve të ndryshme të projektit IoT/robotikë/smart-home/…. Megjithatë, një gjë që nuk e ka, në krahasim me një kompjuter normal, është një buton i fikjes. Pra, si mund të krijojmë
Argino Debounce Simple: 4 Hapa
Arduino Simple Debounce: Ky udhëzues ka të bëjë me mënyrën e bërjes së lehtë të heqjes me 2 butona. Të gjitha që ju nevojiten janë njohuri themelore në programimin elektronik dhe arduino. Video:https://youtu.be/Iw6rA0cduWgNëse keni ndonjë pyetje ose problem mund të kontaktoni mua në postën time: iwx
Mikrokontrolluesi AVR. Ndryshoni LED -të duke përdorur një çelës butoni me shtytje. Butoni i Shtypjes Debouncing .: 4 Hapa
Mikrokontrolluesi AVR. Ndryshoni LED -të duke përdorur një çelës butoni me shtytje. Butoni i Shtypjes Debouncing .: Në këtë pjesë, ne do të mësojmë Si të bëjmë programin C kodin për ATMega328PU për të ndryshuar statusin e tre LED -ve sipas hyrjes nga një çelës butoni. Gjithashtu, ne kemi eksploruar një zgjidhje për problemin e "Switch Bounce". Si zakonisht, ne duam