Sisukord:

STM32CubeMX nupu tagasilöök katkestusega: 5 sammu
STM32CubeMX nupu tagasilöök katkestusega: 5 sammu

Video: STM32CubeMX nupu tagasilöök katkestusega: 5 sammu

Video: STM32CubeMX nupu tagasilöök katkestusega: 5 sammu
Video: Toggle relay using push-button on STM32 Nucleo 2024, Detsember
Anonim
STM32CubeMX nupp katkestab katkestusega
STM32CubeMX nupp katkestab katkestusega

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

Probleemi mõistmine
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

STM32CubeMX konfiguratsioon
STM32CubeMX konfiguratsioon

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: