Sisällysluettelo:
- Vaihe 1: Laitteisto- ja ohjelmistovaatimukset
- Vaihe 2: Ongelman ymmärtäminen
- Vaihe 3: STM32CubeMX -määritykset
- Vaihe 4: Keil -ohjelmistokehitys
- Vaihe 5: Johtopäätös
Video: STM32CubeMX -painike poistuu keskeytyksestä: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Hei, tässä opetusohjelmassa yritän antaa yksinkertaisen ratkaisuni estääksesi painikkeiden pomppimisen, mikä on erittäin vakava ongelma. Internetissä on monia videoita, jotka tarjoavat ratkaisun tähän ongelmaan, mutta ei muita ulkoiseen keskeytykseen. Kaikissa näissä videoissa painikkeen painallus tarkistetaan tehottomalla pollausmenetelmällä. Aloitetaan siis!
Vaihe 1: Laitteisto- ja ohjelmistovaatimukset
Laitteistovaatimukset:
- STM32 ARM -kehityskortti
- Tietokone
Ohjelmistovaatimukset:
- STM32CubeMX
- Keil uVision 5
Vaihe 2: Ongelman ymmärtäminen
Joten yritämme löytää ratkaisun painikkeiden pomppimisongelmaan. Siksi meidän on ymmärrettävä ongelma. Joten kun painamme painiketta, sen pitäisi tulla tila, joka on päinvastainen kuin edellinen tila. Jos esimerkiksi se oli KORKEA, sen on oltava MATALA ja jos se oli MATALA, sen on oltava KORKEA. Tämä on kuitenkin ihanteellinen tila (PROTEUS:)) Todellisuudessa painettaessa painiketta se alkaa pomppia HIGH ja LOW välillä ennen kuin se siirtyy valmiustilaan. Joten teeskentelee, että sitä on painettu useita kertoja, mikä aiheuttaa ongelmia. Joten mitä meidän pitäisi tehdä?
Tässä haluan huomata, että tässä esimerkissä käytämme ulkoista keskeytystä painikkeen painalluksen havaitsemiseksi. Joten kun olemme havainneet painikkeen painamisen, meidän on odotettava vähän aikaa, kuten 50 mS, jotta voimme saavuttaa valmiustilan ja tarkistaa uudelleen, onko painike valmiustila vai ei. Jos se on lepotilassa, voimme jatkaa tehtäväämme. Katsotaan siis koodia:)
Vaihe 3: STM32CubeMX -määritykset
Joten meidän on ensin otettava ulkoinen keskeytys käyttöön painikkeellemme (oletan tässä, että käytät STM32F407VG -etsintäkorttia):
- Napsauta "Pinout & Configuration" -välilehdessä painiketta PA0, joka on kytketty painikkeeseen, ja valitse GPIO_EXTI0, joka mahdollistaa ulkoisen keskeytyksen kyseisellä tapilla.
- Vaihda nastan "käyttäjän tarra" muotoon "Push_Button" tai mitä tahansa.
Sitten meidän on määritettävä ajastin 50 ms: n aikaviiveen luomiseksi:
- Siirry "Ajastimet" -osioon
- Napsauta TIM1
- Valitse "Sisäinen kello" kellon lähteeksi
-
Kokoonpanossa (Jos haluat ymmärtää tämän osan, katso tämä opetusohjelma, erittäin suositeltava "Servomoottorin ohjaus STM32F4 ARM MCU: lla"):
- Aseta esiasetin 32000
- Ja vasta -aika 50: een
- Ota kaikki keskeytykset käyttöön "NVIC -asetukset" -välilehdessä
Ota LED käyttöön ulostulona:
Napsauta PD12 ja aseta "GPIO_Output"
Määritä sitten kello kuten yllä olevassa kuvassa ja luo koodi.
Vaihe 4: Keil -ohjelmistokehitys
Ensinnäkin määritämme tilamuuttujan, joka varmistaa, ettemme käynnistä ajastinta ulkoisen keskeytyksen sisällä, kun pomppiminen tapahtui:
/ * USER CODE BEGIN PFP */bool state = true; / * KÄYTTÖKOODI LOPPU PFP */
Kirjoitetaan sitten ISR ulkoiselle keskeytykselle:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); tila = epätosi; } muu {_NOP (); }}
Kun painiketta painetaan, tarkistamme, onko se määritelty painike ja onko tila totta. Alussa tila on tosi voidakseen syöttää if -lauseen. Syöttämisen jälkeen aloitamme ajastimen ja teemme tilasta epätodellisen varmistaaksemme, että pomppiminen ei käynnistä ajastinta uudelleen.
Sitten kirjoitamme ISR ajastinkeskeytykselle:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Estä käyttämättömien argumenttien kokoamisvaroitus * / UNUSED (htim);
/* HUOMAUTUS: Tätä toimintoa ei saa muuttaa, kun soittopyyntöä tarvitaan, HAL_TIM_PeriodElapsedCallback voitaisiin toteuttaa käyttäjätiedostossa */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIIN, GPIIN12) tila = tosi; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * KÄYTTÄJÄKOODIN LOPPU 4 */
50 ms: n jälkeen tarkistamme, onko painike vielä nollaustilassa tai vapautettu, jos kyllä, tiedämme, että painike on lepotilassa. Sitten vaihdamme lediä, teemme tilasta totta, jotta voimme havaita toisen painalluksen ja pysäyttää ajastimen voidaksemme käynnistää sen uudelleen.
Joten tämä prosessi varmistaa, että estämme poistumisen ongelman.
Vaihe 5: Johtopäätös
Tämä oli painikkeen poiston koodi. Haluan huomata, että olen kehittänyt tämän koodin enkä ole asiantuntijaohjelmoija. Eli virheitä voi varmasti tulla. Jos sinulla on parempi ratkaisu, muista se. Älä unohda, jos kohtaat ongelmia, kirjoita minulle ja yritän auttaa.
Suositeltava:
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
STM32CubeMx -mikrofoni (STM32F407VG): 5 vaihetta
STM32CubeMx -mikrofoni (STM32F407VG): Hei! Tässä projektissa yritämme saada ääntä käyttämällä mikrofonia (ulkoinen ei sisäinen mikrofoni) ja toistaa sitä kaiuttimen kautta. Tämä opetusohjelma on hyvin lyhyt, koska annan selityksiä projektin osista joidenkin videoiden perusteella. Joten hyppäämme
STM32L100 Vilkkuva LED -valo käyttämällä Atollic TrueSTUDIO ja STM32CubeMX: 5 vaihetta
STM32L100 Vilkkuva LED Atollic TrueSTUDIO: n ja STM32CubeMX: n avulla: Tässä projektissa kerron sinulle, kuinka LED -valo vilkkuu 32L100discoveryn avulla. Joten tässä aion kertoa sinulle tämän vilkkuva led -opetusohjelman toimintaperiaatteesta ja myös siitä, millaisia ohjelmistoja ja laitteistoja tarvitset
STM32F4 Discovery Board ja Python USART Communication (STM32CubeMx): 5 vaihetta
STM32F4 Discovery Board ja Python USART Communication (STM32CubeMx): Hei! Tässä opetusohjelmassa yritämme luoda USART -viestinnän STM32F4 ARM MCU: n ja Pythonin välillä (se voidaan korvata millä tahansa muulla kielellä). Joten aloitetaan