- STM32F103C8 I2C అవలోకనం
- STM32F103C8 లో I2C పిన్స్
- Arduino లో I2C పిన్స్
- భాగాలు అవసరం
- సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
- STM32 లో I2C ప్రోగ్రామింగ్
- మాస్టర్ STM32 ప్రోగ్రామింగ్ వివరణ
- స్లేవ్ ఆర్డునో ప్రోగ్రామింగ్ వివరణ
మా మునుపటి ట్యుటోరియల్లో, రెండు ఆర్డునో బోర్డుల మధ్య SPI మరియు I2C కమ్యూనికేషన్ గురించి తెలుసుకున్నాము. ఈ ట్యుటోరియల్లో మేము ఒక ఆర్డునో బోర్డ్ను బ్లూ పిల్ బోర్డ్తో STM32F103C8 తో భర్తీ చేస్తాము మరియు I2C బస్సును ఉపయోగించి ఆర్డునో బోర్డుతో కమ్యూనికేట్ చేస్తాము.
STM32 లో Arduino బోర్డు కంటే ఎక్కువ ఫీచర్లు ఉన్నాయి. కాబట్టి SPI & I2C బస్సును ఉపయోగించడం ద్వారా STM32 మరియు Arduino మధ్య కమ్యూనికేషన్ గురించి తెలుసుకోవడం చాలా బాగుంటుంది. ఈ ట్యుటోరియల్లో, మేము Arduino మరియు STM32F103C8 ల మధ్య కమ్యూనికేషన్ కోసం I2C బస్సును ఉపయోగిస్తాము మరియు తదుపరి ట్యుటోరియల్లో SPI బస్సు గురించి తెలుసుకుంటాము. STM32 బోర్డు గురించి మరింత తెలుసుకోవడానికి, ఇతర STM32 ప్రాజెక్టులను తనిఖీ చేయండి.
STM32F103C8 I2C అవలోకనం
STM32F103C8 బ్లూ పిల్ బోర్డ్లోని I2C (ఇంటర్ ఇంటిగ్రేటెడ్ సర్క్యూట్లు) ను Arduino Uno తో పోల్చి చూస్తే, Arduino లో ATMEGA328 మైక్రోకంట్రోలర్ ఉందని, మరియు STM32F103C8 లో ARM కార్టెక్స్- M3 ఉందని చూస్తాము. STM32 లో రెండు I2C బస్సులు ఉండగా, Arduino Uno కి ఒక I2C బస్సు మాత్రమే ఉంది మరియు STM32 Arduino కన్నా వేగంగా ఉంది.
I2C కమ్యూనికేషన్ గురించి మరింత తెలుసుకోవడానికి, మా మునుపటి కథనాలను చూడండి
- Arduino లో I2C ని ఎలా ఉపయోగించాలి: రెండు Arduino బోర్డుల మధ్య కమ్యూనికేషన్
- PIC మైక్రోకంట్రోలర్ PIC16F877 తో I2C కమ్యూనికేషన్
- I2C ఉపయోగించి ESP32 తో 16X2 LCD ని ఇంటర్ఫేసింగ్
- MSP430 లాంచ్ప్యాడ్తో I2C కమ్యూనికేషన్
- I2C ఉపయోగించకుండా నోడ్ఎంసియుతో ఎల్సిడిని ఇంటర్ఫేసింగ్
- Arduino యొక్క ఒకే ప్రోగ్రామ్లో బహుళ కమ్యూనికేషన్లను (I2C SPI UART) ఎలా నిర్వహించాలి
STM32F103C8 లో I2C పిన్స్
SDA: PB7 లేదా PB9, PB11.
SCL: PB6 లేదా PB8, PB10.
Arduino లో I2C పిన్స్
SDA: A4 పిన్
ఎస్సీఎల్: ఎ 5 పిన్
భాగాలు అవసరం
- STM32F103C8
- ఆర్డునో యునో
- LED (2-Nos)
- పుష్ బటన్ (2-సంఖ్యలు)
- రెసిస్టర్లు (4-సంఖ్యలు)
- బ్రెడ్బోర్డ్
- వైర్లను కనెక్ట్ చేస్తోంది
సర్క్యూట్ రేఖాచిత్రం మరియు కనెక్షన్లు
కింది పట్టిక I2C బస్సును ఉపయోగించడం కోసం STM32 బ్లూ పిల్ మరియు ఆర్డునో యునో మధ్య కనెక్షన్ను చూపిస్తుంది. దీనికి రెండు వైర్లు మాత్రమే అవసరం.
STM32F103C8 |
ఆర్డునో |
పిన్ వివరణ |
బి 7 |
ఎ 4 |
SDA |
బి 6 |
A5 |
ఎస్సీఎల్ |
GND |
GND |
గ్రౌండ్ |
ముఖ్యమైనది
- Arduino GND మరియు STM32F103C8 GND లను కనెక్ట్ చేయడం మర్చిపోవద్దు.
- అప్పుడు బోర్డు యొక్క రెండు పుష్ బటన్ పిన్లకు 10 కే పుల్ డౌన్ రెసిస్టర్ను విడిగా కనెక్ట్ చేయండి.
ఈ STM32 I2C ట్యుటోరియల్లో మేము STM32F103C8 ను మాస్టర్గా మరియు ఆర్డునోను స్లేవ్గా కాన్ఫిగర్ చేస్తాము. రెండు బోర్డులు విడిగా LED & పుష్ బటన్ తో జతచేయబడతాయి.
STM32 లో I2C కమ్యూనికేషన్ను ప్రదర్శించడానికి, మేము మాస్టర్ STM32F103C8 పుష్ బటన్ విలువను ఉపయోగించి బానిస Arduino పుష్ బటన్ విలువను ఉపయోగించి మాస్టర్ STM32 LED ని నియంత్రిస్తాము మరియు బానిస Arduino LED ని నియంత్రిస్తాము. ఈ విలువలు I2C కమ్యూనికేషన్ బస్సు ద్వారా పంపబడతాయి.
STM32 లో I2C ప్రోగ్రామింగ్
ప్రోగ్రామింగ్ Arduino కోడ్ మాదిరిగానే ఉంటుంది. అదే
ఈ ట్యుటోరియల్ మాస్టర్ STM32 కోసం రెండు ప్రోగ్రామ్లను కలిగి ఉంది మరియు మరొకటి బానిస Arduino కోసం. ఈ ప్రాజెక్ట్ చివరిలో ప్రదర్శన వీడియోతో ఇరువైపుల పూర్తి కార్యక్రమాలు ఇవ్వబడ్డాయి.
మాస్టర్ STM32 ప్రోగ్రామింగ్ వివరణ
మాస్టర్ STM32 లో ఏమి జరుగుతుందో చూద్దాం:
1. మొదట STM32F103C8 లో I2C కమ్యూనికేషన్ ఫంక్షన్లను ఉపయోగించడం కోసం వైర్ లైబ్రరీ మరియు సాఫ్ట్వైర్ లైబ్రరీని చేర్చాలి.
# చేర్చండి
2. శూన్య సెటప్లో ()
- మేము బాడ్ రేట్ 9600 వద్ద సీరియల్ కమ్యూనికేషన్ను ప్రారంభిస్తాము.
సీరియల్.బెగిన్ (9600);
- తరువాత మనం పిన్ (B6, B7) వద్ద I2C కమ్యూనికేషన్ను ప్రారంభిస్తాము
వైర్.బెగిన్ ();
3. శూన్య లూప్లో ()
- మొదట మేము స్లేవ్ ఆర్డునో నుండి డేటాను పొందుతాము, కాబట్టి మేము బానిస చిరునామా 8 తో requestFrom () ను ఉపయోగిస్తాము మరియు మేము ఒక బైట్ను అభ్యర్థిస్తాము.
వైర్.రెక్వెస్ట్ (8,1);
అందుకున్న విలువ Wire.read () ఉపయోగించి చదవబడుతుంది
బైట్ a = వైర్.రెడ్ ();
- పిన్ PA1 వద్ద డిజిటల్ రైట్ను ఉపయోగించడం ద్వారా బానిస నుండి అందుకున్న విలువను బట్టి మాస్టర్ LED ఆన్ లేదా ఆఫ్ చేయబడుతుంది మరియు సీరియల్ మానిటర్లో విలువను ముద్రించడానికి సీరియల్ ప్రింట్ కూడా ఉపయోగించబడుతుంది
if (a == 1) { DigitalWrite (LED, HIGH); సీరియల్.ప్రింట్ల్న్ ("మాస్టర్ LED ఆన్"); } else { డిజిటల్ రైట్ (LED, LOW); సీరియల్.ప్రింట్ల్న్ ("మాస్టర్ LED ఆఫ్"); }
- తరువాత మనం పిన్ PA0 యొక్క స్థితిని చదవాలి, అది మాస్టర్ STM32 పుష్ బటన్.
int పిన్వాల్యూ = డిజిటల్ రీడ్ (బటన్పిన్);
- తరువాత తర్కం ప్రకారం పిన్ విలువను పంపండి, కాబట్టి మేము షరతు ఉంటే ఉపయోగిస్తాము మరియు తరువాత 8 తో చిరునామాతో స్లేవ్ ఆర్డునోతో ప్రసారాన్ని ప్రారంభించి, ఆపై పుష్ బటన్ ఇన్పుట్ విలువ ప్రకారం విలువను వ్రాస్తాము.
if (పిన్వాల్యూ == హై) { x = 1; } else { x = 0; } వైర్.బెగిన్ ట్రాన్స్మిషన్ (8); వైర్.రైట్ (x); వైర్.ఎండ్ ట్రాన్స్మిషన్ ();
స్లేవ్ ఆర్డునో ప్రోగ్రామింగ్ వివరణ
1. మొదట మనం I2C కమ్యూనికేషన్ ఫంక్షన్లను ఉపయోగించడం కోసం వైర్ లైబ్రరీని చేర్చాలి.
# చేర్చండి
2. శూన్య సెటప్లో ()
- మేము బాడ్ రేట్ 9600 వద్ద సీరియల్ కమ్యూనికేషన్ను ప్రారంభిస్తాము.
సీరియల్.బెగిన్ (9600);
- తరువాత బానిస చిరునామా 8 తో పిన్ (A4, A5) వద్ద I2C కమ్యూనికేషన్ను ప్రారంభించండి. ఇక్కడ బానిస చిరునామాను పేర్కొనడం చాలా ముఖ్యం.
వైర్.బెగిన్ (8);
తరువాత మనం స్లేవ్ మాస్టర్ నుండి విలువను అందుకున్నప్పుడు వైర్.ఆన్ రిసీవ్ ఫంక్షన్ మరియు స్లేవ్ నుండి మాస్టర్ రిక్వెస్ట్ విలువను ఉన్నప్పుడు వైర్.ఆన్ రిక్వెస్ట్ ఫంక్షన్ కాల్.
Wire.onReceive (receEvent); Wire.onRequest (requestEvent);
3. తరువాత మనకు రెండు ఫంక్షన్లు ఒకటి రిక్వెస్ట్ ఈవెంట్ మరియు మరొకటి రిసీవ్ ఈవెంట్
అభ్యర్థన ఈవెంట్ కోసం
బానిస నుండి మాస్టర్ STM32 అభ్యర్థన విలువ ఈ ఫంక్షన్ అమలు చేస్తుంది. ఈ ఫంక్షన్ స్లేవ్ ఆర్డునో పుష్ బటన్ నుండి ఇన్పుట్ విలువను తీసుకుంటుంది మరియు వైర్.రైట్ () ను ఉపయోగించడం ద్వారా పుష్ బటన్ విలువ ప్రకారం మాస్టర్ STM32 కు బైట్ (1 లేదా 0) పంపుతుంది.
void requestEvent () { int value = DigitalRead (buttonpin); if (విలువ == HIGH) { x = 1; } else { x = 0; } వైర్.రైట్ (x); }
ఈవెంట్ స్వీకరించడానికి
మాస్టర్ బానిస చిరునామా (8) తో బానిసకు డేటాను పంపినప్పుడు, ఈ ఫంక్షన్ అమలు అవుతుంది. ఈ ఫంక్షన్ మాస్టర్ మరియు స్టోర్ నుండి అందుకున్న విలువను టైప్ బైట్ యొక్క వేరియబుల్లో చదువుతుంది మరియు అందుకున్న విలువను బట్టి బానిస LED ని ఆన్ లేదా ఆఫ్ చేయడానికి లాజిక్ ఉంటే ఉపయోగించండి. అందుకున్న విలువ 1 అయితే ఎల్ఈడీ ఆన్ అవుతుంది మరియు 0 ఎల్ఈడీ ఆఫ్ అవుతుంది.
void receEvent (int howMany) { byte a = Wire.read (); if (a == 1) { DigitalWrite (LED, HIGH); సీరియల్.ప్రింట్ల్న్ ("స్లేవ్ LED ఆన్"); } else { డిజిటల్ రైట్ (LED, LOW); సీరియల్.ప్రింట్ల్న్ ("స్లేవ్ LED ఆఫ్"); } ఆలస్యం (500); }
అవుట్పుట్
1. మేము మాస్టర్ STM32 వద్ద పుష్ బటన్ను నొక్కినప్పుడు, స్లేవ్ ఆర్డియోనోకు కనెక్ట్ చేయబడిన LED ఆన్ (వైట్) అవుతుంది.
2. ఇప్పుడు మనం స్లేవ్ సైడ్ వద్ద పుష్ బటన్ను నొక్కినప్పుడు, మాస్టర్కు కనెక్ట్ చేయబడిన ఎల్ఇడి ఆన్ (ఎరుపు) మరియు బటన్ విడుదల అయినప్పుడు ఎల్ఇడి ఆఫ్ అవుతుంది.
3. రెండు పుష్ బటన్లు ఏకకాలంలో నొక్కినప్పుడు, రెండు LED లు ఒకే సమయంలో మెరుస్తాయి మరియు బటన్లు నొక్కే వరకు ఆన్లో ఉంటాయి
కాబట్టి STM32 లో I2C కమ్యూనికేషన్ ఈ విధంగా జరుగుతుంది. ఇప్పుడు మీరు STM32 బోర్డుతో ఏదైనా I2C సెన్సార్ను ఇంటర్ఫేస్ చేయవచ్చు.
మాస్టర్ STM32 మరియు స్లేవ్ ఆర్డునో కోసం పూర్తి కోడింగ్ ప్రదర్శన వీడియోతో క్రింద ఇవ్వబడింది