- STM32F103C8 Pregled I2C
- I2C igle u STM32F103C8
- I2C igle u Arduinu
- Komponente potrebne
- Kružni dijagram i veze
- I2C programiranje u STM32
- Objašnjenje glavnog programiranja STM32
- Objašnjenje programiranja slave Arduino programa
U našim prethodnim vodičima naučili smo o SPI i I2C komunikaciji između dvije Arduino ploče. U ovom uputstvu zamijenit ćemo jednu Arduino ploču pločom Blue Pill koja je STM32F103C8 i komunicirat će s Arduino pločom pomoću I2C sabirnice.
STM32 ima više značajki od Arduino ploče. Stoga bi bilo sjajno naučiti o komunikaciji između STM32 i Arduina pomoću SPI i I2C sabirnice. U ovom uputstvu koristit ćemo I2C sabirnicu za komunikaciju između Arduina i STM32F103C8, a o SPI sabirnici naučit ćemo u sljedećem vodiču. Da biste saznali više o STM32 ploči, provjerite ostale STM32 projekte.
STM32F103C8 Pregled I2C
Uspoređujući I2C (Inter integrirani krugovi) u ploči STM32F103C8 Blue Pill s Arduino Uno, vidjet ćemo da Arduino ima ATMEGA328 mikrokontroler, a STM32F103C8 ARM Cortex-M3. STM32 ima dvije I2C sabirnice, dok Arduino Uno ima samo jednu I2C sabirnicu, a STM32 je brži od Arduina.
Da biste saznali više o I2C komunikaciji, pogledajte naše prethodne članke
- Kako koristiti I2C u Arduinu: Komunikacija između dvije Arduino ploče
- I2C komunikacija s PIC mikrokontrolerom PIC16F877
- Povezivanje 16X2 LCD zaslona s ESP32 pomoću I2C
- I2C komunikacija s MSP430 Launchpadom
- Povezivanje LCD-a s NodeMCU bez upotrebe I2C
- Kako postupati s više komunikacija (I2C SPI UART) u jednom programu arduina
I2C igle u STM32F103C8
SDA: PB7 ili PB9, PB11.
SCL: PB6 ili PB8, PB10.

I2C igle u Arduinu
SDA: A4 pribadača
SCL: pin A5

Komponente potrebne
- STM32F103C8
- Arduino Uno
- LED (2 br.)
- Gumb (2-br.)
- Otpornici (4 br.)
- Breadboard
- Spajanje žica
Kružni dijagram i veze

Sljedeća tablica prikazuje vezu između STM32 Blue Pill i Arduino Uno za upotrebu I2C sabirnice. Potrebne su samo dvije žice.
|
STM32F103C8 |
Arduino |
Opis pribadače |
|
B7 |
A4 |
SDA |
|
B6 |
A5 |
SCL |
|
GND |
GND |
Prizemlje |
Važno
- Ne zaboravite povezati Arduino GND i STM32F103C8 GND zajedno.
- Zatim spojite vučni otpor od 10 k na igle tipke na obje ploče odvojeno.
U ovom uputstvu za STM32 I2C konfigurirat ćemo STM32F103C8 kao Master, a Arduino kao Slave. Obje ploče su zasebno pričvršćene LED-om i tipkom.
Da bismo demonstrirali I2C komunikaciju u STM32, kontroliramo glavnu STM32 LED pomoću vrijednosti podređenog Arduino pritiska i kontroliramo slave Arduino LED pomoću glavne STM32F103C8 vrijednosti tipke. Te se vrijednosti šalju putem I2C komunikacijske sabirnice.
I2C programiranje u STM32
Programiranje je slično Arduino kodu. Isto
Ovaj tutorial ima dva programa, jedan za master STM32 i drugi za slave Arduino. Kompletni programi za obje strane dati su na kraju ovog projekta s demonstracijskim videom.
Objašnjenje glavnog programiranja STM32
U Master STM32 da vidimo što se događa:
1. Prije svega trebamo uključiti knjižnicu Wire i softwire knjižnicu za upotrebu I2C komunikacijskih funkcija u STM32F103C8.
#include
2. U void postavljanju ()
- Serijsku komunikaciju započinjemo brzinom prijenosa 9600.
Serial.begin (9600);
- Dalje započinjemo I2C komunikaciju na pinu (B6, B7)
Wire.begin ();
3. U petlji Void ()
- Prvo dobivamo podatke iz podređenog Arduina, pa koristimo requestFrom () s podređenom adresom 8 i tražimo jedan bajt.
Wire.requestFrom (8,1);
Primljena vrijednost očitava se pomoću Wire.read ()
bajt a = Wire.read ();
- Ovisno o primljenoj vrijednosti od podređenog, glavna se LED lampica UKLJUČUJE ili ISKLJUČUJE digitalnim pisanjem na pin PA1, a također se serijski ispis koristi za ispis vrijednosti na serijskom monitoru
if (a == 1) { digitalWrite (LED, VISOKO); Serial.println ("Glavni LED uključen"); } else { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Dalje moramo pročitati status pina PA0 koji je glavni tipka STM32.
int pinvalue = digitalRead (pribadača);
- Zatim pošaljite vrijednost pina u skladu s logikom, pa koristimo uvjet if, a zatim započinjemo prijenos s slave arduinom s 8 kao adresom, a zatim zapišemo vrijednost prema ulaznoj vrijednosti gumba.
ako je (pinvalue == HIGH) { x = 1; } ostalo { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Objašnjenje programiranja slave Arduino programa
1. Prije svega moramo uključiti knjižnicu Wire za upotrebu I2C komunikacijskih funkcija.
#include
2. U void postavljanju ()
- Serijsku komunikaciju započinjemo brzinom prijenosa 9600.
Serial.begin (9600);
- Sljedeće započnite I2C komunikaciju na pin-u (A4, A5) s slave adresom kao 8. Ovdje je važno odrediti slave adresu.
Wire.begin (8);
Dalje moramo pozvati funkciju Wire.onReceive kada Slave primi vrijednost od master-a, a Wire.onRequest poziv kada Master zahtijeva vrijednost od Slave-a.
Wire.onReceive (receiveEvent); Wire.onRequest (requestEvent);
3. Dalje imamo dvije funkcije jednu za događaj zahtjeva i jednu za događaj primanja
Za zahtjev Događaj
Kada glavni STM32 zahtijeva vrijednost od podređenog, izvršit će se ova funkcija. Ova funkcija uzima ulaznu vrijednost iz potpornog gumba Slave Arduino i šalje bajt (1 ili 0) glavnom STM32 prema vrijednosti tipke pomoću Wire.write ().
void requestEvent () { int vrijednost = digitalRead (gumb); if (vrijednost == VISOKO) { x = 1; } ostalo { x = 0; } Wire.write (x); }
Za događaj primanja
Kada Master pošalje podatke slave s slave adresom (8), ova će se funkcija izvršiti. Ova funkcija čita primljenu vrijednost s master-a i pohranjuje u varijablu bajta tipa, a zatim koristi if logiku za uključivanje ili isključivanje slave-diode ovisno o primljenoj vrijednosti. Ako je primljena vrijednost 1, LED se uključuje, a za 0 LED isključuje.
nevažeće receiveEvent (int howMany) { byte a = Wire.read (); if (a == 1) { digitalWrite (LED, VISOKO); Serial.println ("Slave LED ON"); } else { digitalWrite (LED, LOW); Serial.println ("Slave LED OFF"); } kašnjenje (500); }
Izlaz
1. Kada pritisnemo tipku na Master STM32, LED dioda spojena na Slave Ardiono svijetli (bijela).

2. Sada kada pritisnemo tipku na podređenoj strani, LED spojena na Master uključuje se (crveno), a kad se tipka otpusti, isključuje se.

3. Kad su istovremeno pritisnute obje tipke, istovremeno obje LED diode svijetle i ostaju UKLJUČENE sve dok se ne pritisnu tipke

Dakle, ovako se odvija I2C komunikacija u STM32. Sada možete spojiti bilo koji I2C senzor sa STM32 pločom.
Kompletno kodiranje Master STM32 i Slave Arduino dato je u nastavku s demonstracijskim video zapisom
