- Mga uri ng Pagkagambala at ISR
- Syntax para Makagambala sa STM32
- Kinakailangan ang Mga Bahagi
- Circuit Diagram at Mga Koneksyon
- Programming STM32F103C8 para sa mga nakakagambala
Ang mga pagkagambala ay isang mekanismo kung saan maaaring suspindihin ng isang I / O o isang tagubilin ang normal na pagpapatupad ng processor at masisilbi ang sarili nito tulad ng may pinakamataas na priyoridad. Tulad ng halimbawa, ang isang processor na gumagawa ng isang normal na pagpapatupad ay maaari ring patuloy na subaybayan para sa isang uri ng kaganapan o isang nagagambala na mangyari. Iyon ay kapag ang isang panlabas na pagkagambala ay nangyari (tulad ng mula sa ilang sensor) pagkatapos ay i-pause ng processor ang normal na pagpapatupad nito at unang ihatid ang makagambala at pagkatapos ay ipagpatuloy ang normal na pagpapatupad nito.
Dito sa proyektong ito, para sa pag-unawa sa Mga Nakagagambala sa STM32F103C8, gagamitin namin ang push button bilang panlabas na makagambala. Dito tataasan namin ang isang numero mula sa 0 at ipakita ito sa 16x2 LCD, at tuwing ang pindutan ng push ay pinindot ang led turn ON at ang LCD display ay nagpapakita ng INTERRUPT. Patay ang LED kaagad kapag ang pindutan ay pinakawalan.
Mga uri ng Pagkagambala at ISR
Ang mga pagkagambala ay maaaring malawak na naiuri sa dalawang uri:
Nakagambala ang Hardware: Kung ang signal sa processor ay mula sa ilang panlabas na aparato tulad ng pindutan o sensor o mula sa ilang ibang aparato sa hardware na bumubuo ng isang senyas at sasabihin sa processor na gawin ang partikular na gawain na naroroon sa ISR ay kilala bilang mga hardware interrupts.
Nakagambala ang Software: Ang nakakagambala na nabuo ng mga tagubilin sa software.
Makagambala sa Nakagawiang Serbisyo
Ang Interrupt Service Routine o isang Interrupt handler ay isang kaganapan na mayroong maliit na hanay ng mga tagubilin dito at kapag naganap ang isang nakakagambala unang ipatupad ng processor ang code na ito na naroroon sa ISR at pagkatapos ay magpatuloy sa gawain na ginagawa nito bago magambala.
Syntax para Makagambala sa STM32
Ang ISR ay sumusunod sa syntax attachInterrupt (digitalPinToInterrupt (pin), ISR, mode) sa Arduino at pareho din ang maaaring magamit sa STM32 habang ginagamit namin ang arduino IDE upang mag-upload ng code.
- digitalPinToInterrupt (pin): Tulad ng sa Arduino board Uno mayroon kaming mga pin na 2,3 at sa mega mayroon kaming 2,3,18,19,20,21 para sa mga nakakagambala. Sa STM32F103C8 mayroon din kaming mga nakakagambala na mga pin ng anumang mga GPIO pin na maaaring magamit para sa mga nakakagambala. Tukuyin lamang namin ang input pin na ginagamit namin para makagambala. Ngunit habang gumagamit ng higit sa isang nakakagambala sa parehong oras maaaring kailanganin nating sundin ang ilang mga paghihigpit.
- ISR: Ito ay isang nakakaabala na pagpapaandar ng handler na tinatawag kapag naganap ang isang panlabas na pagkagambala. Wala itong mga argumento at walang bisa na uri ng pagbabalik.
- Mode: Uri ng paglipat upang ma-trigger ang nakakagambala
- RISING: Upang mag-trigger ng isang nakakagambala kapag ang pin ay naglilipat mula LOW to HIGH.
- FALLING: Upang mag-trigger ng isang nakakagambala kapag ang pin ay lumilipat mula sa Mataas hanggang sa LOW.
- PAGBABAGO: Upang mapalitaw ang isang nakakagambala kapag ang pin ay lumilipat alinman sa LOW to HIGH o HIGH to LOW (ibig sabihin, kapag nagbago ang pin)
Ang ilang mga kundisyon habang gumagamit ng nakakagambala
- Makagambala sa pagpapaandar sa Karaniwang Serbisyo (ISR) ay dapat na maikli hangga't maaari.
- Ang pagka-antala () ay hindi gumagana sa loob ng ISR at dapat na iwasan.
Kinakailangan ang Mga Bahagi
- STM32F103C8
- Push button
- LED
- Resistor (10K)
- LCD (16x2)
Circuit Diagram at Mga Koneksyon
Ang isang gilid ng push button pin ay konektado sa 3.3V ng STM32 at ang kabilang panig ay konektado sa input pin (PA0) ng STM32 sa pamamagitan ng isang pull down risistor.
Ginamit ang pull Down risistor upang ang microcontroller ay makakakuha lamang ng Mataas o mababa sa input nito kapag ang pindutan ay pinindot o inilabas. Kung hindi man, nang walang pull down risistor, maaaring malito ang MCU at pakainin ang ilang mga random na lumulutang na halaga sa input.
Koneksyon sa pagitan ng STM32F103C8 at LCD
Ipinapakita ng sumusunod na talahanayan ang koneksyon ng pin sa pagitan ng LCD (16X2) at ng STM32F103C8 microcontroller.
STM32F103C8 |
LCD |
GND |
VSS |
+ 5V |
VDD |
Sa Potentiometer Center PIN |
V0 |
PB0 |
Ang RS |
GND |
RW |
PB1 |
E |
PB10 |
D4 |
PB11 |
D5 |
PC13 |
D6 |
PC14 |
D7 |
+ 5V |
A |
GND |
K |
Programming STM32F103C8 para sa mga nakakagambala
Ang programa para sa tutorial na ito ay simple at ibinigay sa pagtatapos ng tutorial na ito. Hindi namin kailangan ng programmer ng FTDI upang i-program ang STM32, ikonekta lamang ang iyong PC sa USB port ng STM32 at simulan ang pag-program sa Arduino IDE. Matuto nang higit pa tungkol sa pagprogram ng STM32 sa pamamagitan ng USB port.
Tulad ng sinabi namin na dito sa tutorial na ito ay magtataas kami ng isang numero mula sa 0 at ipapakita ito sa 16x2 LCD at tuwing pinindot ang isang pindutan ng push ang led ay ON at ipinapakita ng LCD display na 'INTERRUPT'.
Una tukuyin ang mga koneksyon ng LCD pin sa STM32. Maaari mong baguhin ito alinsunod sa iyong mga kinakailangan.
Const int rs = PB10, en = PB11, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
Susunod, isinasama namin ang header file para sa LCD display. Tinatawag nito ang silid-aklatan na naglalaman ng code para sa kung paano dapat makipag-usap ang STM32 sa LCD. Siguraduhin din na ang function na LiquidCrystal ay tinatawag na may mga pangalan ng pin na tinukoy lamang namin sa itaas.
isama
Ginagamit ang mga pandaigdigang variable upang maipasa ang data sa pagitan ng ISR at ng pangunahing programa. Idineklara namin ang variable na ledOn bilang pabagu-bago at din bilang Boolean upang tukuyin ang Tama o Mali.
pabagu-bago ng isip boolean ledOn = false;
Sa loob ng pag- andar ng void setup () , ipapakita namin ang isang intro message at i-clear ito pagkatapos ng 2 segundo.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); pagkaantala (2000); lcd.clear ();
Muli sa parehong pag- andar ng void setup () , kailangan naming tukuyin ang mga input at output pin. Itinakda namin ang pin PA1 para sa output sa LED at PA0 para sa pag-input mula sa push button.
pinMode (PA1, OUTPUT) pinMode (PA0, INPUT)
Dadagdagan din namin ang isang numero, kaya ideklara ang isang variable na may halaga na zero.
int i = 0;
Ngayon ang mahalagang bahagi ng code ay ang function na attachInterrupt () , kasama rin ito sa loob ng void setup ()
attachInterrupt (digitalPinToInterrupt (PA0), buttonPressed, CHANGE)
Tinukoy namin ang pin na PA0 para sa panlabas na makagambala , at ang pindutan ng pindutan ay ang pagpapaandar na tatawag kapag mayroong PAGBABAGO (Mababa sa TAAS o MATAAS hanggang LABO) sa PA0 pin. Maaari mo ring gamitin ang anumang iba pang pangalan ng pag-andar, pin at mode ayon sa kinakailangan.
Sa loob ng void loop () nagdaragdag kami ng isang numero (i) mula sa zero at i-print ang numero sa LCD (16x2).
lcd.clear (); lcd.print ("NUMBER:"); lcd.print (i); ++ i; pagkaantala (1000);
Ang pinakamahalagang bahagi ay ang paglikha ng isang nakakaabala na pagpapaandar ng handler alinsunod sa pangalan na ginamit namin sa function na attachInterrupt () . Gumamit kami ng buttonPressed kaya't lumikha kami ng isang function na void buttonPressed ()
void buttonPressed () { if (ledOn) { ledOn = false; digitalWrite (PA1, LOW); } iba pa { ledOn = true; digitalWrite (PA1, TAAS); lcd.setCursor (0,1); lcd.print ("Makagambala"); } }
Paggawa ng pindutan na ito Pindutin ang () ISR:
Ayon sa halaga ng ledOn variable, ang LED ay ON at OFF.
Estado ng BUTTON |
ledOn (Halaga) |
LED (Pula) |
LCD (16x2) |
WALANG PINALIT |
Mali |
NAKA-OFF |
- |
PINILIT |
Totoo |
ON na |
Ipinapakita ang '' INTERRUPT ' |
Kung ang halaga ng ledOn ay hindi totoo ang LED ay mananatiling naka-off at kung ang halaga ng ledOn ay Totoo pagkatapos ay i-on ang LED at ipinapakita ng LCD display na 'Makagambala' dito.
TANDAAN: Maaaring may epekto ng switch debounce minsan at maaari itong bilangin ang maramihang pag-trigger kapag pinindot ang pushbutton, ito ay dahil maraming mga spike sa boltahe dahil sa mekanikal na dahilan ng paglipat ng push button. Maaari itong mabawasan sa pamamagitan ng pagpapakilala sa RC filter.
Ang kumpletong pagtatrabaho ng mga nakakagambala sa STM32F103C8 ay ipinapakita sa video sa ibaba.