Sisukord:
- 1. samm: nõuded riistvarale ja tarkvarale
- 2. samm: probleemi mõistmine
- Samm: STM32CubeMX seadistamine
- 4. samm: tarkvara arendamine
- 5. samm: järeldus
Video: STM32CubeMX nupu tagasilöök katkestusega: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Tere, selles õpetuses proovin anda oma lihtsa lahenduse, et vältida nuppude põrkumist, mis on väga tõsine probleem. Internetis on sellele probleemile lahendust pakkuda palju videoid, kuid mitte ühtegi neist välise katkestuse jaoks. Kõigis nendes videotes kontrollitakse nupuvajutust ebaefektiivse küsitlusmeetodiga. Niisiis, alustame!
1. samm: nõuded riistvarale ja tarkvarale
Riistvara nõuded:
- STM32 ARM arendusplaat
- Arvuti
Tarkvara nõuded:
- STM32CubeMX
- Keil uVision5
2. samm: probleemi mõistmine
Niisiis, proovime leida lahenduse nuppude põrkamise probleemile. Seetõttu peame probleemist aru saama. Niisiis, kui vajutame nuppu, peaks see tulema olekule, mis on selle eelmisele olekule vastupidine. Näiteks kui see oli KÕRGE, peab see olema MADAL ja kui see oli MADAL, siis peab see olema KÕRGE. See on aga ideaalne olek (PROTEUS:)) Tegelikkuses hakkab see nuppu vajutades hüppama HIGH ja LOW vahel, enne kui jõuab jõudeolekusse. Niisiis, teeskleb, et seda on mitu korda vajutatud, mis põhjustab probleeme. Niisiis, mida me peaksime tegema?
Siinkohal tahan märkida, et selles näites kasutame nupuvajutuse tuvastamiseks välist katkestust. Niisiis, pärast nupuvajutuse tuvastamist peame ooterežiimi jõudmiseks ootama natuke aega, näiteks 50 mS, ja kontrollima uuesti, kas nupp on jõudeolekus või mitte. Kui see on jõudeolekus, saame oma ülesandega jätkata. Vaatame siis koodi:)
Samm: STM32CubeMX seadistamine
Niisiis, peame esmalt lubama oma nupu välise katkestamise (siinkohal eeldan, et kasutate STM32F407VG avastusplaati):
- Vahekaardil "Pinout & Configuration" klõpsake nupul PA0, mis on ühendatud nupuga, ja valige GPIO_EXTI0, mis lubab sellel tihvtil välise katkestuse.
- Muutke tihvti "kasutajasilt" nupuks "Push_Button" või midagi muud, mida soovite.
Seejärel peame 50mS ajaviite loomiseks konfigureerima taimerit:
- Sisestage jaotis "Taimerid"
- Klõpsake nuppu TIM1
- Valige kella allikaks "Sisemine kell"
-
Konfiguratsioonis (kui soovite sellest lõigust aru saada, lugege seda õpetust, väga soovitatav "Servomootori juhtimine koos STM32F4 ARM MCU -ga"):
- Seadistage eelskaala 32000
- Ja vastukaal 50 -le
- Vahekaardil "NVIC -seaded" lubage kõik katkestused
LED -i lubamine väljundina:
Klõpsake PD12 ja määrake "GPIO_Output"
Seejärel seadistage kell nagu ülaltoodud pildil ja genereerige kood.
4. samm: tarkvara arendamine
Esiteks määratleme olekumuutuja, mis tagab, et me ei käivita taimerit välise katkestuse sees, kui põrkamine juhtus:
/ * KASUTAJAKOOD ALUSTAB PFP */bool state = true; / * KASUTAJAKOOD LÕPP PFP */
Seejärel kirjutame välise katkestuse jaoks ISR:
tühine HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); olek = vale; } muu {_NOP (); }}
Nupu vajutamisel kontrollime, kas see oli meie määratud nupp ja kas olek on tõene. Alguses on olek if lause sisestamiseks tõene. Pärast sisenemist alustame taimerit ja muudame oleku väärtuseks vale, et tagasilöök taimerit uuesti ei käivitaks.
Seejärel kirjutame taimeri katkestamiseks ISR:
tühine HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Ennetage kasutamata argumentide koostamise hoiatus * / UNUSED (htim);
/* MÄRKUS. Seda funktsiooni ei tohiks muuta, kui on vaja tagasihelistamist, HAL_TIM_PeriodElapsedCallbacki saab rakendada kasutajafailis */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIIN12, GPIIN12) olek = tõene; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * KASUTAJAKOODI LÕPP 4 */
Pärast 50 ms kontrollime, kas nupp on veel lähtestamise olekus või vabastatud, kui jah, siis teame, et nupp on jõudeolekus. Seejärel lülitame LED -i sisse, muudame oleku tõeseks, et oleks võimalik tuvastada veel üks nupuvajutus ja taimer, et seda uuesti käivitada.
Niisiis, see protsess tagab, et hoiame ära põrkamise probleemi.
5. samm: järeldus
See oli nuppude eemaldamise kood. Tahan märkida, et selle koodi töötasin välja mina ja ma ei ole asjatundlik programmeerija. Nii et vigu võib kindlasti olla. Kui teil on parem lahendus, pange see tähele. Ärge unustage, kui teil tekib probleeme, kirjutage mulle ja ma püüan teid aidata.
Soovitan:
Arduino lihtne tagasilöök: 4 sammu
Arduino Simple Debounce: see juhend on mõeldud kahe nupuvajutusega hõlpsaks tagasilöögiks. Kõik, mida vajate, on põhiteadmised elektroonikast ja arduino programmeerimisest. Video: http://youtu.be/Iw6rA0cduWg Kui teil on küsimusi või probleeme, võite ühendust võtta mina oma meilis: iwx
Loendur nupu abil - Tinker Cad: 3 sammu
Loendur nupu abil | Tinker Cad: Kui olete nupu töötanud, soovite sageli mõnda toimingut teha selle põhjal, mitu korda nuppu vajutatakse. Selleks peate teadma, millal nupp olekut väljalülitatud olekust sisse lülitab, ja loendama, mitu korda see olekumuutus toimub. Th
Minu katse Arduino nupu helisemise meloodias: 11 sammu
Minu katse Arduino nupuvajutuse meloodiale: selles õpetuses näitan teile, kuidas nupp saab meloodiat käivitada. Kooliaasta jooksul juhivad paljud meie elu kellad või helinad, mis annavad meile teada, millal on aeg lahkuda või millal minna. Enamik meist peatub harva ja mõtleb, kuidas need erinevad
RC auto tagasilöök: 4 sammu
RC Car Backfire: hindasin ESC signaali Arduino kaudu, et tagasilöök näeks välja realistlik. Tagasilöök vallandub, kui lähete kiiresti täisgaasilt. Mida vajate: Arduino NanoY-kaabel JRServo 20 kg gaasipõletitorujuhtmest
Vähendamine, tagasilöök, ringlussevõtt: 6 sammu
Vähendage, tagasilöök, ringlussevõtt: ühiskondlikud üritused tekitavad suures koguses jäätmeid alumiiniumist purkidest plasttopsideni, mida saab taaskasutada. Varem puudusid selle ringlussevõtu soodustamiseks programmid, nii et õpilased viskasid need minema ja avaldasid keskkonnale negatiivset mõju