- STM32F103C8 I2C áttekintés
- I2C csapok az STM32F103C8-ban
- I2C csapok Arduino-ban
- Szükséges alkatrészek
- Áramkör és kapcsolatok
- I2C programozás STM32-ben
- Az STM32 mester programozási magyarázata
- Slave Arduino programozási magyarázat
Korábbi oktatóanyagainkban megismerkedtünk két Arduino tábla közötti SPI és I2C kommunikációval. Ebben az oktatóanyagban egy Arduino kártyát lecserélünk a Blue Pill táblára, amely STM32F103C8, és az I2C busz segítségével kommunikál az Arduino táblával.
Az STM32 több funkcióval rendelkezik, mint az Arduino tábla. Szóval nagyon jó lenne megismerni az STM32 és az Arduino közötti kommunikációt az SPI & I2C busz segítségével. Ebben az oktatóanyagban az I2C buszt fogjuk használni az Arduino és az STM32F103C8 közötti kommunikációhoz, és a következő oktatóanyagban megismerjük az SPI buszt. Ha többet szeretne megtudni az STM32 kártyáról, ellenőrizze az egyéb STM32 projekteket.
STM32F103C8 I2C áttekintés
Ha összehasonlítjuk az I2C-t (Inter Integrated Circuits) az STM32F103C8 Blue Pill kártyán az Arduino Uno-val, akkor látni fogjuk, hogy az Arduino-ban van ATMEGA328 mikrovezérlő, és az STM32F103C8-ban ARM Cortex-M3 van. Az STM32 két I2C busszal rendelkezik, míg az Arduino Uno csak egy I2C busszal rendelkezik, és az STM32 gyorsabb, mint az Arduino.
Ha többet szeretne megtudni az I2C kommunikációról, olvassa el korábbi cikkeinket
- Az I2C használata Arduinóban: Két Arduino tábla közötti kommunikáció
- I2C kommunikáció a PIC16F877 PIC mikrovezérlővel
- Összekötő 16X2 LCD és ESP32 I2C használatával
- I2C kommunikáció az MSP430 Launchpad-szal
- Összekötő LCD és NodeMCU az I2C használata nélkül
- A multi kommunikáció (I2C SPI UART) kezelése az arduino egyetlen programjában
I2C csapok az STM32F103C8-ban
SDA: PB7 vagy PB9, PB11.
SCL: PB6 vagy PB8, PB10.
I2C csapok Arduino-ban
SDA: A4 tű
SCL: A5 tű
Szükséges alkatrészek
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Nyomógomb (2-Nos)
- Ellenállások (4 sz.)
- Kenyérlemez
- Vezetékek csatlakoztatása
Áramkör és kapcsolatok
Az alábbi táblázat bemutatja az STM32 Blue Pill és az Arduino Uno közötti kapcsolatot az I2C busz használatához. Csak két vezetéket igényel.
STM32F103C8 |
Arduino |
PIN leírás |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Talaj |
Fontos
- Ne felejtse el összekapcsolni az Arduino GND és az STM32F103C8 GND készülékeket.
- Ezután csatlakoztasson egy 10k-os lehúzható ellenállást mindkét kártya nyomógombos csapjaihoz külön-külön.
Ebben az STM32 I2C oktatóanyagban konfiguráljuk az STM32F103C8-t Master-ként, az Arduino-t pedig Slave-ként. Mindkét táblát külön LED és nyomógomb rögzíti.
Az I2C kommunikáció STM32-ben való bemutatásához a master STM32 LED-et vezérli a slave Arduino nyomógomb értékével, és a slave Arduino LED-et az master STM32F103C8 nyomógomb értékével. Ezeket az értékeket az I2C kommunikációs buszon keresztül küldjük el.
I2C programozás STM32-ben
A programozás hasonló az Arduino kódhoz. Ugyanaz
Ez az oktatóprogram két programmal rendelkezik, az egyik az STM32 mesterhez, a másik pedig a rabszolga Arduino számára. A teljes programokat mindkét fél számára a projekt végén egy bemutató videó tartalmazza.
Az STM32 mester programozási magyarázata
Nézzük meg, mi történik az STM32 Master-ben:
1. Először fel kell vennünk a Wire könyvtárat és a softwire könyvtárat az I2C kommunikációs funkciók használatához az STM32F103C8-ban.
#include
2. Üres beállításban ()
- A soros kommunikációt 9600 átviteli sebességgel kezdjük.
Serial.begin (9600);
- Ezután megkezdjük az I2C kommunikációt a csapon (B6, B7)
Wire.begin ();
3. A Void ciklusban ()
- Először a Slave Arduino-tól kapjuk az adatokat, így a requestFrom () -t használjuk a 8 slave címmel, és egy bájtot kérünk.
Wire.requestFrom (8,1);
A kapott érték beolvasása a Wire.read () használatával
bájt a = Huzal.olvasott ();
- A slave-től kapott értéktől függően a Master LED be- vagy kikapcsol, a PA1-es érintkezőnél a digitalwrite használatával, és a soros nyomtatással is értéket nyomtat a soros monitoron
if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Master LED világít"); } else { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Ezután le kell olvasnunk a PA0 csap állapotát, amely a master STM32 nyomógomb.
int pinvalue = digitalRead (gombostű);
- Ezután küldje el a pin értéket a logika szerint, ezért használjuk az if feltételet, majd a szolga arduino-val kezdjük az adást 8 címmel, majd írjuk az értéket a nyomógomb bemeneti értékének megfelelően.
if (pinvalue == HIGH) { x = 1; } else { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Slave Arduino programozási magyarázat
1. Először is be kell építenünk a Wire könyvtárat az I2C kommunikációs funkciók használatához.
#include
2. Üres beállításban ()
- A soros kommunikációt 9600 átviteli sebességgel kezdjük.
Serial.begin (9600);
- Ezután indítsa el az I2C kommunikációt a PIN-kódon (A4, A5) a slave címmel, mint 8. Itt fontos megadni a slave címet.
Wire.begin (8);
Ezután meg kell hívnunk a Wire.onReceive függvényt, amikor a Slave értéket kap a master-től, és a Wire.onRequest függvény hívást, amikor a Master kéri az értéket a Slave-től.
Wire.onReceive (acceptEvent); Wire.onRequest (requestEvent);
3. Ezután két funkciónk van: az egyik a kérés eseményre és a másik a fogadás eseményre
Kérésre esemény
Amikor a Master STM32 értéket kér a slave-től, akkor ez a funkció végrehajtásra kerül. Ez a funkció a Slave Arduino nyomógombról veszi a bemeneti értéket, és a Wire.write () használatával egy bájtot (1 vagy 0) küld a Master STM32-nek a nyomógomb értéke szerint .
void requestEvent () { int érték = digitalRead (gombostű); if (érték == HIGH) { x = 1; } else { x = 0; } Wire.write (x); }
A fogadó eseményhez
Amikor a Master adatokat küld egy slave-nek egy slave címmel (8), akkor ez a funkció végrehajtásra kerül. Ez a funkció beolvassa a kapott értékeket a mestertől, és tárolja egy változó típusú byte, majd a ha logika kapcsolja szolga LED ON vagy OFF függően a kapott érték. Ha a kapott érték 1, akkor a LED bekapcsol, 0-nál pedig a LED kikapcsol.
void acceptEvent (int howMany) { byte a = Huzal.read (); if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED ON"); } else { digitalWrite (LED, LOW); Serial.println ("Slave LED OFF"); } késés (500); }
Kimenet
1. Amikor megnyomjuk a nyomógombot a Master STM32-nél, a Slave Ardiono-hoz csatlakoztatott LED bekapcsol (fehér).
2. Most, amikor megnyomjuk a nyomógombot a Slave oldalán, a Master-hez csatlakoztatott LED bekapcsol (piros) és a gomb felengedésekor a LED kikapcsol.
3. Ha mindkét nyomógomb egyszerre lenyomva van, akkor mindkét LED egyszerre világít, és folyamatosan világít, amíg a gombokat meg nem nyomja.
Tehát az I2C kommunikáció így zajlik az STM32-ben. Mostantól bármely I2C érzékelőt összekapcsolhat az STM32 kártyával.
A Master STM32 és a Slave Arduino teljes kódolását alább mutatjuk be egy bemutató videóval