- STM32F103C8 I2C סקירה כללית
- סיכות I2C ב- STM32F103C8
- סיכות I2C בארדואינו
- רכיבים נדרשים
- תרשים מעגלים וחיבורים
- תכנות I2C ב- STM32
- הסבר לתכנות מאסטר STM32
- הסבר על תכנות עבדים של ארדואינו
בהדרכות הקודמות שלנו למדנו על תקשורת SPI ו- I2C בין שני לוחות Arduino. במדריך זה נחליף לוח אחד לארדואינו בלוח הגלולה הכחולה שהוא STM32F103C8 ונתקשר עם לוח הארדואינו באמצעות אוטובוס I2C.
ל- STM32 יש יותר תכונות מלוח Arduino. אז זה יהיה נהדר ללמוד על תקשורת בין STM32 לארדואינו באמצעות אוטובוס SPI & I2C. במדריך זה נשתמש באוטובוס I2C לתקשורת בין Arduino ו- STM32F103C8 ונלמד על אוטובוס SPI במדריך הבא. למידע נוסף על לוח STM32, בדוק פרויקטים אחרים של STM32.
STM32F103C8 I2C סקירה כללית
בהשוואת I2C (מעגלים משולבים אינטראקטיביים) בלוח הגלולה הכחולה STM32F103C8 עם Arduino Uno, אז נראה שלארדואינו יש מיקרו-בקר ATMEGA328, וב- STM32F103C8 יש ARM Cortex-M3. ל- STM32 שני אוטובוסים I2C ואילו ל- Arduino Uno יש רק אוטובוס I2C אחד ו- STM32 הוא מהיר יותר מאשר Arduino.
למידע נוסף על תקשורת I2C, עיין במאמרים הקודמים שלנו
- כיצד להשתמש ב- I2C בארדואינו: תקשורת בין שני לוחות ארדואינו
- תקשורת I2C עם מיקרו-בקר PIC16F877
- ממשק 16X2 LCD עם ESP32 באמצעות I2C
- תקשורת I2C עם MSP430 Launchpad
- ממשק LCD עם NodeMCU ללא שימוש ב- I2C
- כיצד לטפל בתקשורת מרובה (I2C SPI UART) בתכנית יחידה של ארדואינו
סיכות I2C ב- STM32F103C8
SDA: PB7 או PB9, PB11.
SCL: PB6 או PB8, PB10.
סיכות I2C בארדואינו
SDA: סיכה A4
SCL: סיכה A5
רכיבים נדרשים
- STM32F103C8
- ארדואינו אונו
- LED (2-Nos)
- לחצן כפתור (2-Nos)
- נגדים (4-Nos)
- קרש לחם
- חוטי חיבור
תרשים מעגלים וחיבורים
הטבלה הבאה מציגה את החיבור בין הגלולה הכחולה STM32 ל- Arduino Uno לשימוש באוטובוס I2C. זה דורש שני חוטים בלבד.
STM32F103C8 |
ארדואינו |
תיאור סיכה |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
קרקע, אדמה |
חָשׁוּב
- אל תשכח לחבר את ה- Arduino GND ו- STM32F103C8 GND יחד.
- ואז חבר נגד משוך למטה של 10k לסיכות כפתור הלחיצה של שני הלוח בנפרד.
במדריך זה STM32 I2C נגדיר את ה- STM32F103C8 כ- Master ו- Arduino כ- Slave. שני הלוחות מחוברים עם נורית וכפתור לחיצה בנפרד.
כדי להדגים תקשורת I2C ב- STM32, אנו שולטים במאסטר STM32 LED באמצעות ערך כפתור לחיצת Arduino ועבד שליטה ב- Arduino LED באמצעות Master STM32F103C8. ערכים אלה נשלחים באמצעות אוטובוס תקשורת I2C.
תכנות I2C ב- STM32
התכנות דומה לקוד הארדואינו. אותו הדבר
במדריך זה שתי תוכניות האחת למאסטר STM32 ואחת עבור עבד ארדואינו. תוכניות שלמות לשני הצדדים ניתנות בסוף פרויקט זה עם סרטון הדגמה.
הסבר לתכנות מאסטר STM32
במאסטר STM32 בואו נראה מה קורה:
1. קודם כל עלינו לכלול את ספריית החוט וספריית התוכנה לשימוש בפונקציות תקשורת I2C ב- STM32F103C8.
#לִכלוֹל
2. בהגדרת הריק ()
- אנו מתחילים בתקשורת סדרתית בקצב שידור 9600.
Serial.begin (9600);
- לאחר מכן נתחיל את תקשורת I2C בסיכה (B6, B7)
Wire.begin ();
3. בלולאה בטלה ()
- ראשית אנו מקבלים את הנתונים מ- Slave Arduino ולכן אנו משתמשים ב- requestFrom () עם כתובת העבדים 8 ואנחנו מבקשים בית אחד.
Wire.requestFrom (8,1);
הערך שהתקבל נקרא באמצעות Wire.read ()
בתים a = Wire.read ();
- בהתאם לערך שהתקבל מהעבד, נורית ה- Master מופעלת או כבויה באמצעות digitalwrite בסיכה PA1 וגם הדפסה טורית משמשת להדפסת ערך במוניטור סדרתי.
אם (a == 1) { digitalWrite (LED, HIGH); Serial.println ("נורית נורית מופעלת"); } אחר { digitalWrite (LED, LOW); Serial.println ("נורית LED כבויה"); }
- בשלב הבא עלינו לקרוא את מצבו של הסיכה PA0 שהיא כפתור הלחיצה STM32 הראשי.
int pinvalue = digitalRead (buttonpin);
- לאחר מכן שלח את ערך הסיכה על פי ההיגיון, אז נשתמש אם תנאי ואז נתחיל עם השידור עם עבד ארדואינו עם 8 ככתובת ואז נכתוב את הערך על פי ערך קלט הכפתור.
אם (ערך נקוב == HIGH) { x = 1; } אחר { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
הסבר על תכנות עבדים של ארדואינו
1. קודם כל עלינו לכלול את ספריית Wire לשימוש בפונקציות תקשורת I2C.
#לִכלוֹל
2. בהגדרת הריק ()
- אנו מתחילים בתקשורת סדרתית בקצב שידור 9600.
Serial.begin (9600);
- לאחר מכן התחל את תקשורת I2C בסיכה (A4, A5) עם כתובת העבדים כ- 8. כאן חשוב לציין את כתובת העבדים.
Wire.begin (8);
לאחר מכן עלינו להתקשר לפונקציה Wire.onReceive כאשר Slave מקבל ערך ממאסטר ו- Wire.onRequest פונקציית call כאשר מאסטר מבקש ערך מ- Slave.
Wire.onReceive (receivevent); Wire.onRequest (requestEvent);
3. לאחר מכן יש לנו שתי פונקציות אחת לאירוע בקשה ואחת לאירוע קבלה
לבקשה אירוע
כאשר מאסטר STM32 מבקש ערך מהעבד פונקציה זו תבוצע. פונקציה זו אכן לוקחת ערך קלט מכפתור הלחיצה של Slave Arduino ושולחת בתים (1 או 0) ל- Master STM32 על פי ערך כפתור הלחיצה באמצעות Wire.write ().
void requestEvent () { int value = digitalRead (buttonpin); אם (ערך == HIGH) { x = 1; } אחר { x = 0; } Wire.write (x); }
לקבלת אירוע
כאשר מאסטר שולח נתונים לעבד עם כתובת עבד (8), פונקציה זו תבוצע. פונקציה זו קוראת את הערך שהתקבל ממאסטר ומאחסנת במשתנה מסוג בתים ואז משתמשת אם לוגיקה בכדי להפעיל או לכבות את נורית העבדים בהתאם לערך שהתקבל. אם הערך שהתקבל הוא 1 אז נורית LED נדלקת ועבור 0 נורית כיבה.
void receiveEvent (int howMany) { byte a = Wire.read (); אם (a == 1) { digitalWrite (LED, HIGH); Serial.println ("נורית עבד דולקת"); } אחר { digitalWrite (LED, LOW); Serial.println ("Slave LED OFF"); } עיכוב (500); }
תְפוּקָה
1. כאשר אנו לוחצים על כפתור הלחץ ב- Master STM32, נורית ה- LED המחוברת לעבד ארדיונו נדלקת (לבנה).
2. כעת, כשאנו לוחצים על כפתור הלחיצה בצד Slave, נורית ה- LED המחוברת ל- Master נדלקת (אדומה) וכאשר שחרור הלחצן נכבה ה- LED.
3. כאשר שני כפתורי הלחיצה לחצו בו זמנית, שני נוריות הנורית זוהרות בו זמנית ונשארות דולקות עד לחיצה על הכפתורים
אז ככה תקשורת I2C מתרחשת ב- STM32. כעת תוכלו לממשק כל חיישן I2C עם לוח STM32.
הקידוד השלם עבור מאסטר STM32 ועבד ארדואינו ניתן להלן עם סרטון הדגמה