- STM32F103C8 I2C - prehľad
- I2C piny v STM32F103C8
- I2C piny v Arduine
- Súčasti sú povinné
- Schéma zapojenia a zapojenia
- Programovanie I2C v STM32
- Vysvetlenie programovania Master STM32
- Vysvetlenie programovania Slave Arduino
V našich predchádzajúcich tutoriáloch sme sa dozvedeli o komunikácii SPI a I2C medzi dvoma doskami Arduino. V tomto tutoriále nahradíme jednu dosku Arduino doskou Blue Pill, ktorá je STM32F103C8 a budeme s doskou Arduino komunikovať pomocou zbernice I2C.
STM32 má viac funkcií ako doska Arduino. Bolo by skvelé dozvedieť sa viac o komunikácii medzi STM32 a Arduino pomocou zbernice SPI & I2C. V tomto výučbe budeme používať zbernicu I2C na komunikáciu medzi Arduino a STM32F103C8 a v ďalšom výučbe sa dozvieme o zbernici SPI. Ak sa chcete dozvedieť viac o doske STM32, pozrite si ďalšie projekty STM32.
STM32F103C8 I2C - prehľad
Pri porovnaní I2C (Inter Integrated Circuits) v doske STM32F103C8 Blue Pill s Arduino Uno potom uvidíme, že Arduino má v sebe mikrokontrolér ATMEGA328 a STM32F103C8 má v sebe ARM Cortex-M3. STM32 má dve zbernice I2C, zatiaľ čo Arduino Uno má iba jednu zbernicu I2C a STM32 je rýchlejšia ako Arduino.
Ak sa chcete dozvedieť viac informácií o komunikácii I2C, prečítajte si naše predchádzajúce články
- Ako používať I2C v Arduine: Komunikácia medzi dvoma doskami Arduino
- Komunikácia I2C s mikrokontrolérom PIC PIC16F877
- Prepojenie LCD 16X2 s ESP32 pomocou I2C
- Komunikácia I2C s MSP430 Launchpad
- Prepojenie LCD s NodeMCU bez použitia I2C
- Ako zvládnuť viacnásobnú komunikáciu (I2C SPI UART) v jednom programe arduino
I2C piny v STM32F103C8
SDA: PB7 alebo PB9, PB11.
SCL: PB6 alebo PB8, PB10.
I2C piny v Arduine
SDA: kolík A4
SCL: kolík A5
Súčasti sú povinné
- STM32F103C8
- Arduino Uno
- LED (2-nosové)
- Tlačidlo (2-nosové)
- Rezistory (4-nosové)
- Nepál
- Pripojenie drôtov
Schéma zapojenia a zapojenia
Nasledujúca tabuľka zobrazuje spojenie medzi STM32 Blue Pill a Arduino Uno na použitie zbernice I2C. Vyžaduje iba dva vodiče.
STM32F103C8 |
Arduino |
Popis špendlíka |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Uzemnenie |
Dôležité
- Nezabudnite prepojiť Arduino GND a STM32F103C8 GND dohromady.
- Potom pripojte sťahovací rezistor 10k k pinom tlačidla na obidvoch doskách osobitne.
V tomto výučbe STM32 I2C nakonfigurujeme STM32F103C8 ako Master a Arduino ako Slave. Obe dosky sú pripevnené LED a tlačidlom zvlášť.
Aby sme demonštrovali komunikáciu I2C v STM32, riadime hlavnú LED STM32 pomocou hodnoty tlačidla slave Arduino a ovládame slave Arduino LED pomocou hodnoty tlačidla master STM32F103C8. Tieto hodnoty sa posielajú cez komunikačnú zbernicu I2C.
Programovanie I2C v STM32
Programovanie je podobné kódu Arduino. Rovnaký
Tento tutoriál má dva programy, jeden pre master STM32 a druhý pre slave Arduino. Kompletné programy pre obe strany sú uvedené na konci tohto projektu s ukážkovým videom.
Vysvetlenie programovania Master STM32
V Master STM32 sa pozrime, čo sa deje:
1. Najskôr musíme zahrnúť knižnicu Wire a knižnicu softwire na používanie komunikačných funkcií I2C v STM32F103C8.
#include
2. V neplatnom nastavení ()
- Sériovú komunikáciu začíname prenosovou rýchlosťou 9600.
Serial.begin (9600);
- Ďalej začneme komunikáciu I2C na pinu (B6, B7)
Wire.begin ();
3. Vo Void slučke ()
- Najskôr získame údaje zo Slave Arduino, takže použijeme requestFrom () s podradenou adresou 8 a vyžiadame si jeden bajt.
Wire.requestFrom (8,1);
Prijatá hodnota sa načíta pomocou funkcie Wire.read ()
byte a = Wire.read ();
- V závislosti na prijatej hodnote od podradenej jednotky sa rozsvieti alebo zhasne LED Master pomocou digitálneho zápisu na kolíku PA1 a tiež sa použije sériová tlač na tlač hodnoty na sériovom monitore
if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Hlavná LED svieti"); } else { digitalWrite (LED, LOW); Serial.println ("Hlavná LED nesvieti"); }
- Ďalej musíme prečítať stav kolíka PA0, ktorý je hlavným tlačidlom STM32.
int pinvalue = digitalRead (buttonpin);
- Ďalej pošleme hodnotu kolíka podľa logiky, takže použijeme podmienku if a potom začneme prenos slave arduino s 8 ako adresou a potom napíšeme hodnotu podľa vstupnej hodnoty tlačidla.
if (pinvalue == HIGH) { x = 1; } else { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Vysvetlenie programovania Slave Arduino
1. Najprv je potrebné zahrnúť knižnicu Wire pre používanie komunikačných funkcií I2C.
#include
2. V neplatnom nastavení ()
- Sériovú komunikáciu začíname prenosovou rýchlosťou 9600.
Serial.begin (9600);
- Ďalej začnite komunikáciu I2C na kolíku (A4, A5) s adresou slave ako 8. Tu je dôležité určiť adresu slave.
Wire.begin (8);
Ďalej musíme zavolať funkciu Wire.onReceive, keď Slave dostane hodnotu z hlavného a volanie funkcie Wire.onRequest, keď Master požiada o hodnotu zo Slave.
Wire.onReceive (receiveEvent); Wire.onRequest (requestEvent);
3. Ďalej máme dve funkcie, jednu pre udalosť žiadosti a jednu pre udalosť príjmu
Na vyžiadanie Udalosť
Keď Master STM32 požaduje hodnotu od slave, vykoná sa táto funkcia. Táto funkcia vezme vstupnú hodnotu z tlačidla Slave Arduino a odošle bajt (1 alebo 0) na Master STM32 podľa hodnoty tlačidla pomocou funkcie Wire.write ().
void requestEvent () { int hodnota = digitalRead (buttonpin); if (hodnota == VYSOKÁ) { x = 1; } else { x = 0; } Wire.write (x); }
Pre príjem udalosti
Keď Master pošle dáta slave s adresou slave (8), vykoná sa táto funkcia. Táto funkcia načíta prijatú hodnotu z hlavnej jednotky a uloží ju do premennej typu byte a potom použije, ak má logika zapnúť alebo vypnúť podradenú LED v závislosti od prijatej hodnoty. Ak je prijímaná hodnota 1, potom LED svieti a 0 svieti.
void receiveEvent (int howMany) { byte a = Wire.read (); if (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED svieti"); } else { digitalWrite (LED, LOW); Serial.println ("LED slave nesvieti"); } oneskorenie (500); }
Výkon
1. Keď stlačíte tlačidlo na Master STM32, rozsvieti sa LED pripojená k Slave Ardiono (biela).
2. Teraz, keď stlačíme tlačidlo na strane Slave, rozsvieti sa LED pripojená k Master (červená) a po uvoľnení tlačidla LED zhasne.
3. Keď sú obidve tlačidlá stlačené súčasne, potom obidve LED diódy svietia súčasne a zostávajú svietiť, kým nie sú stlačené tlačidlá
Takto teda prebieha komunikácia I2C v STM32. Teraz môžete prepojiť akýkoľvek snímač I2C s doskou STM32.
Kompletné kódovanie pre Master STM32 a Slave Arduino je uvedené nižšie s ukážkovým videom