- అంతరాయాలు మరియు ISR రకాలు
- STM32 లో అంతరాయం కోసం సింటాక్స్
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
- అంతరాయాల కోసం STM32F103C8 ప్రోగ్రామింగ్
అంతరాయాలు అనేది I / O లేదా బోధన ప్రాసెసర్ యొక్క సాధారణ అమలును నిలిపివేయగల ఒక యంత్రాంగం మరియు దీనికి అత్యధిక ప్రాధాన్యత ఉన్నట్లుగానే సేవలను పొందుతుంది. ఉదాహరణకు, సాధారణ అమలు చేస్తున్న ప్రాసెసర్ కూడా ఏదో ఒక రకమైన సంఘటన కోసం లేదా నిరంతరం జరగడానికి ఆటంకం కలిగిస్తుంది. బాహ్య అంతరాయం జరిగినప్పుడు (కొన్ని సెన్సార్ నుండి) అప్పుడు ప్రాసెసర్ దాని సాధారణ అమలును పాజ్ చేస్తుంది మరియు మొదట అంతరాయానికి సేవలు అందిస్తుంది మరియు తరువాత దాని సాధారణ అమలును కొనసాగిస్తుంది.
ఇక్కడ ఈ ప్రాజెక్ట్లో, STM32F103C8 లోని అంతరాయాలను అర్థం చేసుకోవడానికి, మేము పుష్ బటన్ను బాహ్య అంతరాయంగా ఉపయోగిస్తాము. ఇక్కడ మనం 0 నుండి ఒక సంఖ్యను పెంచుతాము మరియు దానిని 16x2 LCD లో ప్రదర్శిస్తాము మరియు పుష్ బటన్ నొక్కినప్పుడు లీడ్ ఆన్ అవుతుంది మరియు LCD డిస్ప్లే INTERRUPT ని చూపుతుంది. బటన్ విడుదలైన వెంటనే LED ఆపివేయబడుతుంది.
అంతరాయాలు మరియు ISR రకాలు
అంతరాయాలను విస్తృతంగా రెండు రకాలుగా వర్గీకరించవచ్చు:
హార్డ్వేర్ అంతరాయాలు: ప్రాసెసర్కు సిగ్నల్ బటన్ లేదా సెన్సార్ వంటి కొన్ని బాహ్య పరికరం నుండి లేదా సిగ్నల్ను ఉత్పత్తి చేసే కొన్ని ఇతర హార్డ్వేర్ పరికరాల నుండి మరియు ISR లో ఉన్న ప్రత్యేకమైన పనిని చేయమని ప్రాసెసర్కు చెప్పాలంటే హార్డ్వేర్ అంతరాయాలు అంటారు.
సాఫ్ట్వేర్ అంతరాయాలు: సాఫ్ట్వేర్ సూచనల ద్వారా ఉత్పన్నమయ్యే అంతరాయాలు.
సేవా దినచర్యకు అంతరాయం కలిగించండి
ఇంటరప్ట్ సర్వీస్ రొటీన్ లేదా ఇంటరప్ట్ హ్యాండ్లర్ అనేది ఒక చిన్న సూచనలను కలిగి ఉన్న ఒక సంఘటన మరియు అంతరాయం ఏర్పడినప్పుడు ప్రాసెసర్ మొదట ISR లో ఉన్న ఈ కోడ్ను అమలు చేసి, ఆపై అంతరాయానికి ముందు చేస్తున్న పనిని కొనసాగించండి.
STM32 లో అంతరాయం కోసం సింటాక్స్
ఆర్డునోలో ISR సింటాక్స్ అటాచ్ఇంటరప్ట్ (డిజిటల్ పిన్టోఇంటరప్ట్ (పిన్), ISR, మోడ్) ను అనుసరిస్తోంది మరియు కోడ్ను అప్లోడ్ చేయడానికి మేము ఆర్డునో IDE ని ఉపయోగిస్తున్నప్పుడు STM32 లో కూడా ఉపయోగించవచ్చు.
- DigitalPinToInterrupt (పిన్): అర్డునో బోర్డ్ యునోలో మాదిరిగానే మనకు పిన్స్ 2,3 ఉన్నాయి మరియు మెగాలో అంతరాయాల కోసం 2,3,18,19,20,21 ఉన్నాయి. STM32F103C8 లో మనకు అంతరాయ పిన్లు కూడా ఉన్నాయి, ఏదైనా GPIO పిన్లను అంతరాయాల కోసం ఉపయోగించవచ్చు. మేము అంతరాయం కోసం ఉపయోగిస్తున్న ఇన్పుట్ పిన్ను పేర్కొనడానికి. ఒకే సమయంలో ఒకటి కంటే ఎక్కువ అంతరాయాలను ఉపయోగిస్తున్నప్పుడు మేము కొన్ని పరిమితులను పాటించాల్సి ఉంటుంది.
- ISR: ఇది అంతరాయ హ్యాండ్లర్ ఫంక్షన్, ఇది బాహ్య అంతరాయం సంభవించినప్పుడు పిలువబడుతుంది. దీనికి వాదనలు మరియు శూన్య రిటర్న్ రకం లేదు.
- మోడ్: అంతరాయాన్ని ప్రేరేపించడానికి పరివర్తన రకం
- రైజింగ్: పిన్ తక్కువ నుండి అధికంగా మారినప్పుడు అంతరాయాన్ని ప్రేరేపించడానికి.
- ఫాలింగ్: పిన్ అధిక నుండి తక్కువకు బదిలీ అయినప్పుడు అంతరాయాన్ని ప్రేరేపించడానికి.
- మార్చండి: పిన్ తక్కువ నుండి అధికంగా లేదా అధికంగా తక్కువకు (అంటే పిన్ మారినప్పుడు) బదిలీ అయినప్పుడు అంతరాయాన్ని ప్రేరేపించడానికి.
అంతరాయాన్ని ఉపయోగిస్తున్నప్పుడు కొన్ని పరిస్థితులు
- ఇంటరప్ట్ సర్వీస్ రొటీన్ ఫంక్షన్ (ISR) వీలైనంత తక్కువగా ఉండాలి.
- ఆలస్యం () ఫంక్షన్ ISR లోపల పనిచేయదు మరియు తప్పించబడాలి.
భాగాలు అవసరం
- STM32F103C8
- నొక్కుడు మీట
- LED
- రెసిస్టర్ (10 కె)
- LCD (16x2)
సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
పుష్ బటన్ పిన్ యొక్క ఒక వైపు STM32 యొక్క 3.3V కి అనుసంధానించబడి ఉంది మరియు మరొక వైపు పుల్ డౌన్ రెసిస్టర్ ద్వారా STM32 యొక్క ఇన్పుట్ పిన్ (PA0) తో అనుసంధానించబడి ఉంది.
పుల్ డౌన్ రెసిస్టర్ ఉపయోగించబడుతుంది, తద్వారా మైక్రోకంట్రోలర్ బటన్ నొక్కినప్పుడు లేదా విడుదల చేసినప్పుడు దాని ఇన్పుట్ వద్ద మాత్రమే ఎక్కువ లేదా తక్కువ లభిస్తుంది. లేకపోతే, పుల్ డౌన్ రెసిస్టర్ లేకుండా, MCU గందరగోళానికి గురి కావచ్చు మరియు ఇన్పుట్కు కొన్ని యాదృచ్ఛిక తేలియాడే విలువలను ఇవ్వవచ్చు.
STM32F103C8 మరియు LCD మధ్య కనెక్షన్
కింది పట్టిక LCD (16X2) మరియు STM32F103C8 మైక్రోకంట్రోలర్ మధ్య పిన్ కనెక్షన్ను చూపుతుంది.
STM32F103C8 |
ఎల్సిడి |
GND |
వి.ఎస్.ఎస్ |
+ 5 వి |
VDD |
పొటెన్టోమీటర్ సెంటర్ పిన్కు |
వి 0 |
పిబి 0 |
ఆర్ఎస్ |
GND |
ఆర్డబ్ల్యూ |
పిబి 1 |
ఇ |
పిబి 10 |
డి 4 |
పిబి 11 |
డి 5 |
పిసి 13 |
డి 6 |
పిసి 14 |
డి 7 |
+ 5 వి |
జ |
GND |
కె |
అంతరాయాల కోసం STM32F103C8 ప్రోగ్రామింగ్
ఈ ట్యుటోరియల్ కోసం ప్రోగ్రామ్ సులభం మరియు ఈ ట్యుటోరియల్ చివరిలో ఇవ్వబడుతుంది. STM32 ప్రోగ్రామ్కు మాకు FTDI ప్రోగ్రామర్ అవసరం లేదు, మీ PC ని STM32 యొక్క USB పోర్ట్కు కనెక్ట్ చేయండి మరియు Arduino IDE తో ప్రోగ్రామింగ్ ప్రారంభించండి. USB పోర్ట్ ద్వారా STM32 ప్రోగ్రామింగ్ గురించి మరింత తెలుసుకోండి.
ఈ ట్యుటోరియల్లో మనం 0 నుండి ఒక సంఖ్యను పెంచబోతున్నామని మరియు దానిని 16x2 LCD లో ప్రదర్శించబోతున్నామని మరియు ఒక పుష్ బటన్ నొక్కినప్పుడు లీడ్ ఆన్ అవుతుంది మరియు LCD డిస్ప్లే 'INTERRUPT' చూపిస్తుంది.
మొదట STM32 తో LCD పిన్స్ కనెక్షన్లను నిర్వచించండి. మీరు మీ అవసరాలకు అనుగుణంగా దీన్ని సవరించవచ్చు.
const int rs = PB10, en = PB11, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
తరువాత, మేము LCD డిస్ప్లే కోసం హెడర్ ఫైల్ను చేర్చుతాము. ఇది STM32 LCD తో ఎలా సంభాషించాలో కోడ్ ఉన్న లైబ్రరీని పిలుస్తుంది. మేము పైన నిర్వచించిన పిన్ పేర్లతో లిక్విడ్ క్రిస్టల్ ఫంక్షన్ పిలువబడిందని నిర్ధారించుకోండి.
చేర్చండి
ISR మరియు ప్రధాన ప్రోగ్రామ్ మధ్య డేటాను పాస్ చేయడానికి గ్లోబల్ వేరియబుల్స్ ఉపయోగించబడతాయి. మేము వేరియబుల్ ledOn ను అస్థిరతగా మరియు ట్రూ లేదా ఫాల్స్ను పేర్కొనడానికి బూలియన్గా ప్రకటిస్తాము.
అస్థిర బూలియన్ ledOn = తప్పుడు;
శూన్య సెటప్ () ఫంక్షన్ లోపల, మేము ఒక పరిచయ సందేశాన్ని ప్రదర్శిస్తాము మరియు 2 సెకన్ల తర్వాత దాన్ని క్లియర్ చేస్తాము.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); ఆలస్యం (2000); lcd.clear ();
మళ్ళీ అదే శూన్య సెటప్ () ఫంక్షన్లో, మేము ఇన్పుట్ మరియు అవుట్పుట్ పిన్లను పేర్కొనాలి. అవుట్పుట్ కోసం పిన్ PA1 ను LED కి మరియు పుష్ బటన్ నుండి ఇన్పుట్ కోసం PA0 ని సెట్ చేసాము.
పిన్మోడ్ (PA1, OUTPUT) పిన్మోడ్ (PA0, INPUT)
మేము కూడా ఒక సంఖ్యను పెంచబోతున్నాము, కాబట్టి విలువ సున్నాతో వేరియబుల్ ప్రకటించండి.
int i = 0;
ఇప్పుడు కోడ్ యొక్క ముఖ్యమైన భాగం అటాచ్ఇంటరప్ట్ () ఫంక్షన్, ఇది శూన్య సెటప్ () లోపల కూడా చేర్చబడింది
అటాచ్ఇంటరప్ట్ (డిజిటల్ పిన్టోఇంటరప్ట్ (PA0), బటన్ ప్రెస్డ్, మార్చండి)
బాహ్య అంతరాయం కోసం మేము పిన్ PA0 ని పేర్కొన్నాము మరియు PA0 పిన్లో మార్పు (LOW నుండి HIGH లేదా HIGH to LOW) ఉన్నప్పుడు పిలవబడే ఫంక్షన్ బటన్ ప్రెస్. మీరు అవసరానికి అనుగుణంగా ఏదైనా ఇతర ఫంక్షన్ పేరు, పిన్ మరియు మోడ్ను కూడా ఉపయోగించవచ్చు.
శూన్య లూప్ లోపల () మేము సున్నా నుండి ఒక సంఖ్య (i) ను పెంచుతాము మరియు LCD (16x2) లో సంఖ్యను ప్రింట్ చేస్తాము.
lcd.clear (); lcd.print ("NUMBER:"); lcd.print (i); ++ i; ఆలస్యం (1000);
అటాచ్ఇంటరప్ట్ () ఫంక్షన్లో మనం ఉపయోగించిన పేరు ప్రకారం ఇంటరప్ట్ హ్యాండ్లర్ ఫంక్షన్ను సృష్టించడం చాలా ముఖ్యమైన భాగం. మేము బటన్ప్రెస్డ్ను ఉపయోగించాము కాబట్టి ఇక్కడ మేము ఫంక్షన్ శూన్య బటన్ను సృష్టించాము
void buttonPressed () { if (ledOn) { ledOn = false; డిజిటల్ రైట్ (PA1, LOW); } else { ledOn = true; డిజిటల్ రైట్ (PA1, HIGH); lcd.setCursor (0,1); lcd.print ("అంతరాయం"); } }
ఈ బటన్ యొక్క పని ఒత్తిడి () ISR:
లెడ్ఆన్ వేరియబుల్ విలువ ప్రకారం, LED ఆన్ మరియు ఆఫ్ అవుతుంది.
బటన్ స్టేట్ |
ledOn (విలువ) |
LED (ఎరుపు) |
LCD (16x2) |
UNPRESSED |
తప్పుడు |
ఆఫ్ |
- |
ప్రెస్ చేయబడింది |
నిజం |
పై |
'' ఇంటర్రప్ట్ 'చూపిస్తుంది |
ఉంటే ledOn విలువ తప్పుడు అప్పుడు LED అవశేషాలు ఆపివేయబడింది మరియు ఉంటే ledOn విలువ ట్రూ అప్పుడు LED మారుతుంది మరియు అది LCD ప్రదర్శన ప్రదర్శనలు 'అంతరాయ'.
గమనిక: కొన్నిసార్లు స్విచ్ డీబౌన్స్ ప్రభావం ఉండవచ్చు మరియు పుష్బటన్ నొక్కినప్పుడు అది బహుళ ట్రిగ్గర్ను లెక్కించవచ్చు, దీనికి కారణం పుష్ బటన్ మారడానికి యాంత్రిక కారణం వల్ల వోల్టేజ్లో అనేక స్పైక్లు. ఆర్సి ఫిల్టర్ను ప్రవేశపెట్టడం ద్వారా దీనిని తగ్గించవచ్చు.
STM32F103C8 లో అంతరాయాల యొక్క పూర్తి పని క్రింది వీడియోలో చూపబడింది.