- Přehled ST232F103C8 I2C
- I2C piny v STM32F103C8
- Piny I2C v Arduinu
- Požadované komponenty
- Schéma zapojení a zapojení
- Programování I2C v STM32
- Vysvětlení programování Master STM32
- Vysvětlení programování Slave Arduino
V našich předchozích cvičeních jsme se dozvěděli o komunikaci SPI a I2C mezi dvěma deskami Arduino. V tomto tutoriálu nahradíme jednu desku Arduino deskou Blue Pill, která je STM32F103C8 a budeme s deskou Arduino komunikovat pomocí sběrnice I2C.
STM32 má více funkcí než deska Arduino. Bylo by skvělé dozvědět se o komunikaci mezi STM32 a Arduino pomocí sběrnice SPI & I2C. V tomto výukovém programu použijeme sběrnici I2C pro komunikaci mezi Arduino a STM32F103C8 a v dalším výukovém programu se dozvíme o sběrnici SPI. Chcete-li se dozvědět více o desce STM32, podívejte se na další projekty STM32.
Přehled ST232F103C8 I2C
Při srovnání I2C (Inter Integrated Circuits) v desce STM32F103C8 Blue Pill s Arduino Uno pak uvidíme, že Arduino má v sobě mikrokontrolér ATMEGA328 a STM32F103C8 má v sobě ARM Cortex-M3. STM32 má dvě sběrnice I2C, zatímco Arduino Uno má pouze jednu sběrnici I2C a STM32 je rychlejší než Arduino.
Další informace o komunikaci I2C najdete v našich předchozích článcích
- Jak používat I2C v Arduinu: Komunikace mezi dvěma deskami Arduino
- Komunikace I2C s mikrokontrolérem PIC PIC16F877
- Rozhraní 16X2 LCD s ESP32 pomocí I2C
- Komunikace I2C s Launchpadem MSP430
- Propojení LCD s NodeMCU bez použití I2C
- Jak zvládnout více komunikací (I2C SPI UART) v jediném programu arduino
I2C piny v STM32F103C8
SDA: PB7 nebo PB9, PB11.
SCL: PB6 nebo PB8, PB10.
Piny I2C v Arduinu
SDA: kolík A4
SCL: kolík A5
Požadované komponenty
- STM32F103C8
- Arduino Uno
- LED (2 nosy)
- Tlačítko (2-Nos)
- Rezistory (4-Nos)
- Nepájivá deska
- Připojení vodičů
Schéma zapojení a zapojení
Následující tabulka ukazuje spojení mezi STM32 Blue Pill a Arduino Uno pro použití sběrnice I2C. Vyžaduje pouze dva vodiče.
STM32F103C8 |
Arduino |
Popis kolíku |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Přízemní |
Důležité
- Nezapomeňte propojit Arduino GND a STM32F103C8 GND dohromady.
- Poté připojte Pull down rezistor 10k k pinům tlačítka na obou deskách samostatně.
V tomto výukovém programu STM32 I2C nakonfigurujeme STM32F103C8 jako Master a Arduino jako Slave. Obě desky jsou připevněny samostatně pomocí LED a tlačítka.
Abychom předvedli komunikaci I2C v STM32, ovládáme hlavní LED STM32 pomocí hodnoty tlačítka slave Arduino a ovládáme slave Arduino LED pomocí hodnoty tlačítka STM32F103C8. Tyto hodnoty jsou odesílány přes komunikační sběrnici I2C.
Programování I2C v STM32
Programování je podobné kódu Arduino. Stejný
Tento výukový program má dva programy, jeden pro master STM32 a druhý pro slave Arduino. Kompletní programy pro obě strany jsou uvedeny na konci tohoto projektu s ukázkovým videem.
Vysvětlení programování Master STM32
V Master STM32 se podívejme, co se děje:
1. Nejprve musíme do STM32F103C8 zahrnout knihovnu Wire a knihovnu softwire pro používání komunikačních funkcí I2C.
#zahrnout
2. V neplatném nastavení ()
- Zahajujeme sériovou komunikaci s přenosovou rychlostí 9600.
Serial.begin (9600);
- Dále zahájíme komunikaci I2C na pinu (B6, B7)
Wire.begin ();
3. Ve smyčce Void ()
- Nejprve získáme data ze Slave Arduino, takže použijeme requestFrom () s podřízenou adresou 8 a požadujeme jeden bajt.
Wire.requestFrom (8,1);
Přijatá hodnota se čte pomocí Wire.read ()
byte a = Wire.read ();
- V závislosti na přijaté hodnotě z podřízené jednotky se hlavní LED zapne nebo vypne pomocí digitálního zápisu na kolíku PA1 a také se použije sériový tisk k tisku hodnoty na sériovém monitoru
if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Hlavní LED svítí"); } else { digitalWrite (LED, LOW); Serial.println ("Hlavní LED nesvítí"); }
- Dále musíme přečíst stav pinu PA0, který je hlavním tlačítkem STM32.
int pinvalue = digitalRead (buttonpin);
- Dále pošlete hodnotu kolíku podle logiky, takže použijeme podmínku if a poté zahájíme přenos slave arduino s 8 jako adresou a poté zapíšeme hodnotu podle vstupní hodnoty tlačítka.
if (pinvalue == HIGH) { x = 1; } else { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Vysvětlení programování Slave Arduino
1. Nejprve musíme zahrnout knihovnu Wire pro používání komunikačních funkcí I2C.
#zahrnout
2. V neplatném nastavení ()
- Zahajujeme sériovou komunikaci s přenosovou rychlostí 9600.
Serial.begin (9600);
- Dále spusťte komunikaci I2C na pinu (A4, A5) s podřízenou adresou jako 8. Zde je důležité zadat podřízenou adresu.
Wire.begin (8);
Dále musíme zavolat funkci Wire.onReceive, když Slave obdrží hodnotu z masteru a Wire.onRequest volání funkce, když Master požaduje hodnotu od Slave.
Wire.onReceive (receiveEvent); Wire.onRequest (requestEvent);
3. Dále máme dvě funkce, jednu pro událost požadavku a jednu pro událost přijetí
Na vyžádání Událost
Když hodnota požadavku Master STM32 od podřízené bude spuštěna tato funkce. Tato funkce přebírá vstupní hodnotu z tlačítka Slave Arduino a odesílá bajt (1 nebo 0) na Master STM32 podle hodnoty tlačítka pomocí Wire.write ().
void requestEvent () { int value = digitalRead (buttonpin); if (hodnota == VYSOKÁ) { x = 1; } else { x = 0; } Wire.write (x); }
Pro příjem události
Když Master odešle data slave s adresou slave (8), provede se tato funkce. Tato funkce načte přijatou hodnotu z hlavní jednotky a uloží ji do proměnné typu byte a poté použije, pokud logika, zapne nebo vypne podřízenou LED v závislosti na přijaté hodnotě. Pokud je přijatá hodnota 1, LED se rozsvítí a po 0 LED zhasne.
void receiveEvent (int howMany) { byte a = Wire.read (); if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED svítí"); } else { digitalWrite (LED, LOW); Serial.println ("Slave LED nesvítí"); } zpoždění (500); }
Výstup
1. Když stiskneme tlačítko na Master STM32, rozsvítí se LED připojená k Slave Ardiono (bílá).
2. Nyní, když stiskneme tlačítko na straně Slave, LED připojená k Master se rozsvítí (červená) a po uvolnění tlačítka LED zhasne.
3. Když jsou obě tlačítka stisknuta současně, obě LED diody svítí současně a zůstávají svítit, dokud tlačítka nestisknete
Takto tedy probíhá komunikace I2C v STM32. Nyní můžete propojit jakýkoli snímač I2C s deskou STM32.
Kompletní kódování pro Master STM32 a Slave Arduino je uvedeno níže s ukázkovým videem