Orodha ya maudhui:

STM32CubeMX Kitufe cha Kujadili na Usumbufu: Hatua 5
STM32CubeMX Kitufe cha Kujadili na Usumbufu: Hatua 5

Video: STM32CubeMX Kitufe cha Kujadili na Usumbufu: Hatua 5

Video: STM32CubeMX Kitufe cha Kujadili na Usumbufu: Hatua 5
Video: STM32 - программирование для начинающих. Пошагово. CubeMX CubeIDE 2024, Julai
Anonim
STM32CubeMX Kitufe cha Debut Kwa Kukatizwa
STM32CubeMX Kitufe cha Debut Kwa Kukatizwa

Hi, katika mafunzo haya nitajaribu kutoa suluhisho langu rahisi kuzuia kitufe cha kifungo ambayo ni suala kubwa sana. Kwenye mtandao kuna video nyingi za kutoa suluhisho kwa suala hili, lakini sio kati yao kwa usumbufu wa nje. Katika video hizi zote kitufe cha waandishi wa habari hukaguliwa na njia ya kupigia kura ambayo haina tija. Kwa hivyo, wacha tuanze!

Hatua ya 1: Mahitaji ya vifaa na programu

Mahitaji ya vifaa:

  • Bodi ya maendeleo ya mikono ya STM32
  • Kompyuta

Mahitaji ya programu:

  • STM32CubeMX
  • Keil uVision5

Hatua ya 2: Kuelewa Tatizo

Kuelewa Tatizo
Kuelewa Tatizo

Kwa hivyo, tunajaribu kutafuta suluhisho la shida ya kubonyeza kitufe. Kwa hivyo, tunapaswa kuelewa suala hilo. Kwa hivyo, tunapobonyeza kitufe inapaswa kuja hali ambayo iko kinyume na hali yake ya zamani. Kwa mfano, ikiwa ilikuwa ya juu lazima iwe CHINI na ikiwa ilikuwa CHINI basi lazima iwe juu. Walakini, hii ni hali nzuri (katika PROTEUS:)) Kwa kweli, tunapobonyeza kitufe huanza kugongana kati ya JUU na SASA kabla haijafika hali ya uvivu. Kwa hivyo, hujifanya kuwa imeshinikizwa mara kadhaa ambayo husababisha shida. Kwa hivyo, tunapaswa kufanya nini?

Hapa nataka kutambua kuwa katika mfano huu, tutatumia usumbufu wa nje ili kugundua kitufe cha kifungo. Kwa hivyo, baada ya kugundua kitufe cha kitufe tunahitaji kusubiri wakati, kama 50mS ili kufikia hali ya uvivu na kuangalia tena ikiwa kitufe ni hali ya uvivu au la. Ikiwa iko katika hali ya uvivu basi tunaweza kuendelea na jukumu letu. Kwa hivyo, wacha tuone nambari:)

Hatua ya 3: Usanidi wa STM32CubeMX

Usanidi wa STM32CubeMX
Usanidi wa STM32CubeMX

Kwa hivyo, tunahitaji kwanza kuwezesha usumbufu wa nje kwa kitufe chetu cha kushinikiza (nadhani hapa kwamba unatumia bodi ya ugunduzi ya STM32F407VG):

  • Kwenye kichupo cha "Pinout & Configuration" bonyeza pini PA0 ambayo imeunganishwa na kitufe cha kushinikiza na uchague GPIO_EXTI0 inayowezesha usumbufu wa nje kwenye pini hiyo.
  • Badilisha "lebo ya mtumiaji" ya pini kuwa "Push_Button" au chochote unachotaka.

Halafu, tunahitaji kusanidi kipima muda ili kuunda kuchelewa kwa muda wa 50mS:

  • Ingiza sehemu ya "Vipima muda"
  • Bonyeza TIM1
  • Chagua "Saa ya Ndani" kama chanzo cha Saa
  • Katika usanidi (Ikiwa unataka kuelewa sehemu hii tafadhali rejea mafunzo haya, inapendekezwa sana "Udhibiti wa Magari ya Servo Na STM32F4 ARM MCU"):

    • Weka daktari mkuu kama 32000
    • Na kipindi cha kukabiliana hadi 50
  • Katika kichupo cha "Mipangilio ya NVIC" wezesha usumbufu wote

Wezesha LED kama pato:

Bonyeza PD12 na uweke kama "GPIO_Output"

Kisha, sanidi saa kama ilivyo kwenye picha iliyotolewa hapo juu na utengeneze nambari.

Hatua ya 4: Maendeleo ya Programu ya Keil

Kwanza, tunafafanua hali ya kutofautisha ambayo itahakikisha kwamba hatuwezi kuanza kipima muda ndani ya usumbufu wa nje wakati bouncing ilitokea:

/ * KODI YA MTUMIAJI ANZA PFP * / hali ya bool = kweli; / * KIWANGO CHA MTUMIAJI KUMALIZA PFP * /

Halafu, tunaandika ISR kwa usumbufu wa nje:

batili HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {ikiwa (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); hali = uwongo; } mwingine {_NOP (); }}

Kitufe kinapobanwa tunaangalia ikiwa ilikuwa kitufe chetu cha kushinikiza na ikiwa hali ni kweli. Mwanzoni serikali itakuwa kweli ili kuingiza taarifa hiyo. Baada ya kuingia tunaanza kipima muda na kufanya hali kuwa ya uwongo ili kuhakikisha kuwa bouncing hazitaanza tena kipima muda.

Halafu, tunaandika ISR kwa kukatisha saa:

batili HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Kuzuia hoja zisizotumiwa (s) onyo la mkusanyiko * / UNUSED (htim);

/ * KUMBUKA: Kazi hii haipaswi kubadilishwa, wakati upigaji simu unahitajika, HAL_TIM_PeriodElapsedCallback inaweza kutekelezwa katika faili ya mtumiaji * / ikiwa (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); hali = kweli; HAL_TIM_Base_Stop_IT (& htim1); }}

/ * KIWANGO CHA MTUMIAJI MWISHO 4 * /

Baada ya 50mS tunaangalia ikiwa kitufe bado kiko katika hali ya kuweka upya au kutolewa, ikiwa ndio basi tunajua kuwa kifungo kiko katika hali ya uvivu. Halafu tunabadilisha iliyoongozwa, fanya hali iwe ya kweli ili kuweza kugundua kitufe kingine cha kifungo na usimamishe kipima muda ili kuweza kuanza tena.

Kwa hivyo, mchakato huu utahakikisha kwamba tunazuia suala la kuruka.

Hatua ya 5: Hitimisho

Hii ilikuwa nambari ya kuondoa kitufe. Ninataka kutambua kuwa nambari hii ilitengenezwa na mimi na sio mtaalam wa programu. Kwa hivyo, kunaweza kuwa na makosa. Ikiwa una suluhisho bora tafadhali kumbuka. Usisahau, ikiwa unakutana na shida yoyote tafadhali niandikie na nitajaribu kusaidia.

Ilipendekeza: