- Vrste prekida i ISR
- Sintaksa za prekid u STM32
- Komponente potrebne
- Kružni dijagram i veze
- Programiranje STM32F103C8 za prekide
Prekidi su mehanizam kojim I / O ili naredba mogu obustaviti normalno izvršavanje procesora i servisirati se kao da imaju najveći prioritet. Kao na primjer, procesor koji radi normalno izvršavanje također može kontinuirano nadzirati da li se dogodi neka vrsta događaja ili prekida. Tada se dogodi vanjski prekid (poput nekog senzora), tada procesor zaustavlja normalno izvršavanje i prvo servira prekid, a zatim nastavlja normalno izvršavanje.
Ovdje ćemo u ovom projektu za razumijevanje prekida u STM32F103C8 koristiti gumb kao vanjski prekid. Ovdje ćemo povećati broj s 0 i prikazati ga na LCD-u 16x2, a kad god se pritisne tipka, LED se UKLJUČI, a LCD zaslon prikazuje PREKID. LED se isključuje čim se tipka otpusti.
Vrste prekida i ISR
Prekidi se mogu široko klasificirati u dvije vrste:
Hardverske prekide: Ako signal u procesor dolazi s nekog vanjskog uređaja poput gumba ili senzora ili s drugog hardverskog uređaja koji generira signal i poručuje procesoru da izvrši određeni zadatak prisutan u ISR-u, poznat je kao hardverski prekidi.
Prekidi softvera: Prekidi generirani softverskim uputama.
Rutinska usluga prekida
Rutinska usluga prekida ili rukovatelj prekidima je događaj koji sadrži mali skup uputa i kada se dogodi prekid, procesor prvo izvrši ovaj kod koji je prisutan u ISR-u, a zatim nastavlja sa zadatkom koji je radio prije prekida.
Sintaksa za prekid u STM32
ISR ima sljedeću sintaksu attachInterrupt (digitalPinToInterrupt (pin), ISR, način) u Arduinu, a isti se također može koristiti u STM32 jer koristimo arduino IDE za prijenos koda.
- digitalPinToInterrupt (pin): Kao i na Arduino ploči Uno, imamo pinove 2,3, a u mega imamo 2,3,18,19,20,21 za prekide. U STM32F103C8 također imamo pinove za prekide, bilo koji GPIO pinovi mogu se koristiti za prekide. Samo ćemo odrediti ulazni pin koji koristimo za prekid. No dok istodobno koristimo više prekida, možda ćemo morati slijediti neka ograničenja.
- ISR: To je funkcija obrađivača prekida koja se poziva kada se dogodi vanjski prekid. Nema argumente i tip vraćanja void.
- Način: vrsta prijelaza za pokretanje prekida
- RISING: Za pokretanje prekida kada klin prelazi iz LOW u HIGH.
- PADANJE: Da bi se pokrenuo prekid kada klin prelazi iz VISOKOG u NIZKI.
- PROMJENA: Da bi se pokrenuo prekid kada pin prelazi ili od LOW do HIGH ili od HIGH do LOW (tj. Kada se pin mijenja).
Neki uvjeti tijekom korištenja prekida
- Rutinska funkcija usluge prekida (ISR) mora biti što kraća.
- Funkcija Delay () ne radi unutar ISR-a i treba je izbjegavati.
Komponente potrebne
- STM32F103C8
- Pritisnite tipku
- LED
- Otpornik (10K)
- LCD (16x2)
Kružni dijagram i veze

Jedna strana pin-a tipke spojena je na 3,3 V STM32, a druga strana spojena je na ulazni pin (PA0) STM32 putem spuštenog otpora.
Otpornik Pull Down koristi se tako da mikrokontroler na svom ulazu dobije VISOKO ili NISKO samo kad se pritisne ili otpusti gumb. Inače, bez povlačenja otpora, MCU može zbuniti i na ulaz unijeti neke slučajne plutajuće vrijednosti.

Veza između STM32F103C8 i LCD-a
Sljedeća tablica prikazuje pin vezu između LCD-a (16X2) i mikrokontrolera STM32F103C8.
|
STM32F103C8 |
LCD |
|
GND |
VSS |
|
+ 5V |
VDD |
|
Na PIN centra potenciometra |
V0 |
|
PB0 |
RS |
|
GND |
RW |
|
PB1 |
E |
|
PB10 |
D4 |
|
PB11 |
D5 |
|
PC13 |
D6 |
|
PC14 |
D7 |
|
+ 5V |
A |
|
GND |
K |

Programiranje STM32F103C8 za prekide
Program za ovaj tutorial je jednostavan i dan je na kraju ovog tutorijala. Ne treba nam FTDI programer za programiranje STM32, jednostavno spojite računalo na USB priključak STM32 i započnite programirati s Arduino IDE. Saznajte više o programiranju STM32 putem USB priključka.
Kao što smo rekli da ćemo ovdje u ovom vodiču povećati broj s 0 i prikazati ga na LCD-u dimenzija 16x2, a kad god se pritisne tipka, lampica se UKLJUČI, a LCD zaslon prikazuje 'PREKID'.
Prvo definirajte veze LCD pinova sa STM32. Možete ga izmijeniti prema svojim zahtjevima.
const int rs = PB10, en = PB11, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
Dalje, uključujemo datoteku zaglavlja za LCD zaslon. To poziva biblioteku koja sadrži kôd kako STM32 treba komunicirati s LCD-om. Također se pobrinite da se funkcija LiquidCrystal zove s imenima pinova koje smo upravo definirali gore.
uključuju
Globalne varijable koriste se za prijenos podataka između ISR-a i glavnog programa. Promjenjivu ledOn proglašavamo volatilnom i također logičkom kako bismo odredili Tačno ili Netačno.
volatile boolean ledOn = false;
Unutar funkcije void setup () prikazat ćemo uvodnu poruku i očistiti je nakon 2 sekunde.
lcd.početak (16,2); lcd.print ("DIGEST CIRCUIT"); kašnjenje (2000); lcd.clear ();
Opet u istoj funkciji void setup () , moramo navesti ulazne i izlazne pinove. Postavili smo pin PA1 za izlaz na LED i PA0 za ulaz s tipke.
pinMode (PA1, IZLAZ) pinMode (PA0, INPUT)
Također ćemo povećati broj, pa deklarirajte varijablu s vrijednosti nula.
int i = 0;
Sada je važan dio koda funkcija attachInterrupt () , ona je također uključena u void setup ()
attachInterrupt (digitalPinToInterrupt (PA0), buttonPress, CHANGE)
Naveli smo pin PA0 za vanjski prekid, a buttonPress je funkcija koja se treba pozvati kada u PA0 pinu postoji CHANGE (LOW to HIGH ili HIGH to LOW). Također možete koristiti bilo koje drugo ime funkcije, pin i način rada prema zahtjevu.
Unutar praznine petlje () povećavamo broj (i) s nule i ispisujemo broj na LCD (16x2).
lcd.clear (); lcd.print ("BROJ:"); lcd.print (i); ++ i; kašnjenje (1000);
Najvažniji dio je stvaranje funkcije obrađivača prekida prema imenu koje smo koristili u funkciji attachInterrupt () . Koristili smo buttonPress pa smo ovdje stvorili funkciju void buttonPress ()
void buttonPress () { if (ledOn) { ledOn = false; digitalWrite (PA1, LOW); } else { ledOn = true; digitalWrite (PA1, HIGH); lcd.setCursor (0,1); lcd.print ("Prekid"); } }
Rad ovog gumbaPress () ISR:
Prema vrijednosti ledOn varijable, LED se uključuje i isključuje.
|
DRŽAVA GUMBI |
ledOn (vrijednost) |
LED (crvena) |
LCD (16x2) |
|
NESPRESEN |
Lažno |
ISKLJUČENO |
- |
|
PRITISNUTO |
Pravi |
NA |
Emisija "PREKID" |
Ako je vrijednost ledOn lažna, LED ostaje isključen, a ako je vrijednost ledOn True, LED se uključuje i na LCD zaslonu se prikazuje 'Prekid'.
NAPOMENA: Ponekad može doći do efekta prekida prekidača i on može brojati višestruki okidač kad se pritisne tipka, jer je to nekoliko skokova napona zbog mehaničkog razloga prebacivanja tipke. To se može smanjiti uvođenjem RC filtra.
Kompletan rad prekida u STM32F103C8 prikazan je u donjem videu.
