Satura rādītājs:
- 1. darbība. Prasības aparatūrai un programmatūrai
- 2. darbība. Izprotiet problēmu
- 3. darbība: STM32CubeMX konfigurācija
- 4. solis: Keil programmatūras izstrāde
- 5. darbība. Secinājums
Video: STM32CubeMX pogas atkāpšanās ar pārtraukumu: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:55
Sveiki, šajā apmācībā es centīšos sniegt savu vienkāršo risinājumu, lai novērstu pogu atlēcienu, kas ir ļoti nopietna problēma. Internetā ir daudz videoklipu, kas piedāvā risinājumu šai problēmai, taču neviens no tiem nav paredzēts ārējiem pārtraukumiem. Visos šajos videoklipos pogas nospiešana tiek pārbaudīta, izmantojot neefektīvu aptaujas metodi. Tātad, sāksim!
1. darbība. Prasības aparatūrai un programmatūrai
Aparatūras prasības:
- STM32 ARM izstrādes padome
- Dators
Prasības programmatūrai:
- STM32CubeMX
- Keil uVision5
2. darbība. Izprotiet problēmu
Tātad, mēs cenšamies atrast risinājumu pogas atlēkšanas problēmai. Tāpēc mums ir jāsaprot jautājums. Tātad, nospiežot pogu, tam vajadzētu nonākt stāvoklī, kas ir pretējs iepriekšējam stāvoklim. Piemēram, ja tas bija AUGSTS, tam jābūt ZEMAM, un, ja tas bija ZEMS, tad tam jābūt AUGSTAM. Tomēr tas ir ideāls stāvoklis (PROTEUS:)) Patiesībā, nospiežot pogu, tas sāk atlēkt starp HIGH un LOW, pirms nonāk dīkstāvē. Tātad, izliekas, ka tas ir vairākas reizes nospiests, kas rada problēmas. Tātad, ko mums vajadzētu darīt?
Šeit es vēlos atzīmēt, ka šajā piemērā mēs izmantosim ārēju pārtraukumu, lai noteiktu pogas nospiešanu. Tātad, pēc pogas nospiešanas noteikšanas mums jāgaida nedaudz laika, piemēram, 50 mS, lai sasniegtu dīkstāvi, un vēlreiz pārbaudiet, vai poga ir dīkstāvē. Ja tas ir dīkstāvē, mēs varam turpināt savu uzdevumu. Nu redzēsim kodu:)
3. darbība: STM32CubeMX konfigurācija
Tātad mums vispirms ir jāiespējo mūsu spiedpogas ārējais pārtraukums (šeit es pieņemu, ka jūs izmantojat STM32F407VG atklāšanas paneli):
- Cilnē "Pinout & Configuration" noklikšķiniet uz tapas PA0, kas ir savienota ar spiedpogu, un izvēlieties GPIO_EXTI0, kas ļauj piespraust ārēji.
- Mainiet tapas "lietotāja etiķeti" uz "Push_Button" vai jebko citu, ko vēlaties.
Pēc tam mums ir jākonfigurē taimeris, lai izveidotu 50 ms laika aizkavi:
- Ievadiet sadaļu "Taimeri"
- Noklikšķiniet uz TIM1
- Kā pulksteņa avotu izvēlieties "Iekšējais pulkstenis"
-
Konfigurācijā (ja vēlaties saprast šo sadaļu, lūdzu, skatiet šo pamācību, ļoti ieteicamo "Servo motora vadība ar STM32F4 ARM MCU"):
- Iestatiet prescaler kā 32000
- Un skaitīšanas periods līdz 50
- Cilnē "NVIC iestatījumi" iespējojiet visus pārtraukumus
Iespējot LED kā izeju:
Noklikšķiniet uz PD12 un iestatiet kā "GPIO_Output"
Pēc tam konfigurējiet pulksteni, kā parādīts attēlā, un ģenerējiet kodu.
4. solis: Keil programmatūras izstrāde
Pirmkārt, mēs definējam stāvokļa mainīgo, kas nodrošinās, ka mēs nesākam taimeri ārējā pārtraukumā, kad notika atsitiens:
/ * LIETOTĀJA KODS SĀK PFP */bool state = true; / * LIETOTĀJA KODS BEIDZA PFP */
Pēc tam mēs rakstām ISR ārējam pārtraukumam:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); valsts = nepatiesa; } cits {_NOP (); }}
Nospiežot pogu, mēs pārbaudām, vai tā bija mūsu noteiktā spiedpoga un vai stāvoklis ir patiess. Sākumā stāvoklis būs patiess, lai ievadītu paziņojumu if. Pēc ievadīšanas mēs sākam taimeri un padarām stāvokli nepatiesu, lai nodrošinātu, ka atlecošais taimeris netiks restartēts.
Pēc tam taimera pārtraukšanai mēs rakstām ISR:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Novērst neizmantoto argumentu (-u) apkopošanas brīdinājumu * / UNUSED (htim);
/* PIEZĪME. Šo funkciju nevajadzētu mainīt, ja ir nepieciešama atzvanīšana, HAL_TIM_PeriodElapsedCallback varētu tikt ieviests lietotāja failā */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIIN12, GPIIN12) stāvoklis = taisnība; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * LIETOTĀJA KODA END 4 */
Pēc 50 ms mēs pārbaudām, vai poga vēl nav atiestatīta vai atlaista, ja jā, tad mēs zinām, ka poga ir gaidīšanas stāvoklī. Pēc tam mēs pārslēdzam gaismas diodi, padarām stāvokli patiesu, lai varētu noteikt citu pogu nospiešanas un apturēšanas taimeri, lai varētu to atkal sākt.
Tātad, šis process nodrošinās to, ka mēs novērsīsim atlēcienu problēmu.
5. darbība. Secinājums
Tas bija pogas debounce kods. Es gribu atzīmēt, ka šo kodu izstrādāju es un es neesmu programmētājs. Tātad, noteikti var būt kļūdas. Ja jums ir labāks risinājums, lūdzu, ņemiet to vērā. Neaizmirstiet, ja rodas kādas problēmas, lūdzu, rakstiet man, un es centīšos palīdzēt.
Ieteicams:
Pogas šūnu astoņkāji: 8 soļi
Pogašūnu astoņkājis: Pogas šūnu astoņkājis aizstāj pogu baterijas. Tas ir noderīgi, ja rezerves baterija nav pie rokas. To izmantoja, lai no 4 centu akumulatora darbinātu termometru un mitruma mērītāju. Tiek parādīta arī šīs baterijas izgatavošana
Vienkāršs monētas pogas LED slēdzis (izmantojot svaru): 8 soļi
Vienkāršs monētas pogas LED slēdzis (izmantojot svaru): Tas ir salīdzinoši vienkāršs monētas pogas slēdzis. Ja skavas vadītājiem tiek pielikts svars, gaismas diodes iedegas lejupvērsts spēks
Arduino vadības līdzstrāvas motora ātrums un virziens, izmantojot potenciometru, OLED displeju un pogas: 6 soļi
Arduino vadības līdzstrāvas motora ātrums un virziens, izmantojot potenciometru, OLED displeju un pogas: Šajā apmācībā mēs iemācīsimies izmantot L298N līdzstrāvas motora vadības draiveri un potenciometru, lai ar divām pogām kontrolētu līdzstrāvas motora ātrumu un virzienu un parādītu potenciometra vērtību OLED displejā. Noskatieties demonstrācijas video
Arduino vienkāršā atkāpšanās: 4 soļi
Arduino Simple Debounce: Šī pamācība ir par to, kā viegli atspiesties ar 2 spiedpogām. Viss, kas jums nepieciešams, ir pamatzināšanas elektronikā un arduino programmēšana. Video: http://youtu.be/Iw6rA0cduWg es savā pastā: iwx
Austiņu spraudnis & Pārtraukumu novēršana: 5 soļi
Austiņu spraudnis & Pārtraukumu novēršana: Es daudz braucu un klausos DAUDZ grāmatu mp3 formātā. Man bija apnicis katru mēnesi pirkt jaunas austiņas tikai tāpēc, ka vads kontaktdakšas galā saliektos un pārrautu iekšā esošos vadus. Es izdomāju šo sīkrīku, lai ierobežotu