- STM32F103C8 I2C Oversigt
- I2C-ben i STM32F103C8
- I2C-ben i Arduino
- Komponenter, der kræves
- Kredsløbsdiagram og forbindelser
- I2C programmering i STM32
- Master STM32 Programmering Forklaring
- Slave Arduino Programmering Forklaring
I vores tidligere tutorials har vi lært om SPI og I2C kommunikation mellem to Arduino boards. I denne vejledning udskifter vi et Arduino-kort med Blue Pill-kortet, der er STM32F103C8 og kommunikerer med Arduino-kortet ved hjælp af I2C-bus.
STM32 har flere funktioner end Arduino-kort. Så det ville være dejligt at lære om kommunikation mellem STM32 og Arduino ved hjælp af SPI & I2C bus. I denne vejledning bruger vi I2C-bus til kommunikation mellem Arduino og STM32F103C8 og lærer om SPI-bus i næste tutorial. Hvis du vil vide mere om STM32-kortet, skal du kontrollere andre STM32-projekter.
STM32F103C8 I2C Oversigt
Sammenligning af I2C (Inter Integrated Circuits) i STM32F103C8 Blue Pill-kort med Arduino Uno, så vil vi se, at Arduino har ATMEGA328 microcontroller i sig, og STM32F103C8 har ARM Cortex-M3 i sig. STM32 har to I2C-bus, mens Arduino Uno kun har en I2C-bus, og STM32 er hurtigere end Arduino.
For at lære mere om I2C-kommunikation, se vores tidligere artikler
- Sådan bruges I2C i Arduino: Kommunikation mellem to Arduino Boards
- I2C Kommunikation med PIC Microcontroller PIC16F877
- Interfacing 16X2 LCD med ESP32 ved hjælp af I2C
- I2C kommunikation med MSP430 Launchpad
- Interfacing LCD med NodeMCU uden brug af I2C
- Sådan håndteres multikommunikation (I2C SPI UART) i et enkelt program af arduino
I2C-ben i STM32F103C8
SDA: PB7 eller PB9, PB11.
SCL: PB6 eller PB8, PB10.
I2C-ben i Arduino
SDA: A4-pin
SCL: A5 ben
Komponenter, der kræves
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Trykknap (2-Nos)
- Modstande (4-Nos)
- Brødbræt
- Tilslutning af ledninger
Kredsløbsdiagram og forbindelser
Følgende tabel viser forbindelsen mellem STM32 Blue Pill og Arduino Uno til brug af I2C-bus. Det kræver kun to ledninger.
STM32F103C8 |
Arduino |
Pin Beskrivelse |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Jord |
Vigtig
- Glem ikke at forbinde Arduino GND og STM32F103C8 GND sammen.
- Tilslut derefter en trækmodstand på 10k til trykknapstifterne på begge kort separat.
I denne STM32 I2C-tutorial konfigurerer vi STM32F103C8 som Master og Arduino som Slave. Begge kort er fastgjort med en LED og en trykknap separat.
For at demonstrere I2C-kommunikation i STM32 styrer vi master STM32 LED ved at bruge slave Arduino trykknapværdi og styre slave Arduino LED ved hjælp af master STM32F103C8 trykknapværdi. Disse værdier sendes via I2C-kommunikationsbus.
I2C programmering i STM32
Programmeringen svarer til Arduino-koden. Det samme
Denne vejledning har to programmer et til master STM32 og et andet til slave Arduino. Komplette programmer for begge sider gives i slutningen af dette projekt med en demonstrationsvideo.
Master STM32 Programmering Forklaring
Lad os se i Master STM32 hvad der sker:
1. Først og fremmest skal vi inkludere Wire-biblioteket og softwire-biblioteket til brug af I2C-kommunikationsfunktioner i STM32F103C8.
#omfatte
2. I ugyldig opsætning ()
- Vi starter seriel kommunikation med baudrate 9600.
Serial.begin (9600);
- Dernæst starter vi I2C-kommunikationen ved pin (B6, B7)
Wire.begin ();
3. I ugyldig løkke ()
- Først får vi dataene fra Slave Arduino, så vi bruger requestFrom () med slaveadressen 8, og vi anmoder om en byte.
Wire.requestFrom (8,1);
Den modtagne værdi læses ved hjælp af Wire.read ()
byte a = Wire.read ();
- Afhængig af den modtagne værdi fra slave tændes eller slukkes Master-LED'en ved hjælp af digitalwrite på pin PA1, og også seriel print bruges til at udskrive værdi i seriel skærm
hvis (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Master LED ON"); } andet { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Dernæst skal vi læse status for pin PA0, der er master STM32 trykknap.
int pinvalue = digitalRead (buttonpin);
- Send derefter pinværdien i henhold til logikken, så vi bruger if- tilstand og begynder derefter transmissionen med slave arduino med 8 som adresse og derefter skriver værdien i henhold til trykknapinputværdien.
hvis (pinvalue == HIGH) { x = 1; } andet { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Slave Arduino Programmering Forklaring
1. Først og fremmest skal vi inkludere Wire-biblioteket til brug af I2C-kommunikationsfunktioner.
#omfatte
2. I ugyldig opsætning ()
- Vi starter seriel kommunikation med baudrate 9600.
Serial.begin (9600);
- Start derefter I2C-kommunikationen ved pin (A4, A5) med slave-adresse som 8. Her er det vigtigt at specificere slave-adressen.
Wire.begin (8);
Dernæst skal vi kalde Wire.onReceive- funktionen, når Slave modtager værdi fra master og Wire.onRequest- funktionskald, når Master-anmodningsværdi fra Slave.
Wire.onReceive (receiveEvent); Wire.onRequest (requestEvent);
3. Dernæst har vi to funktioner, en til anmodningshændelse og en til at modtage begivenhed
For anmodning Begivenhed
Når Master STM32 anmoder værdi fra slave, udføres denne funktion. Denne funktion tager inputværdien fra Slave Arduino-trykknappen og sender en byte (1 eller 0) til Master STM32 i henhold til trykknapværdien ved hjælp af Wire.write ().
ugyldig requestEvent () { int værdi = digitalRead (buttonpin); hvis (værdi == HØJ) { x = 1; } andet { x = 0; } Wire.write (x); }
Til modtagelse af begivenhed
Når Master sender data til slave med slave-adresse (8), udføres denne funktion. Denne funktion læser den modtagne værdi fra master og gemmer i en variabel af typen byte og bruger derefter hvis logik til at tænde eller slukke for slave-LED afhængigt af den modtagne værdi. Hvis den modtagne værdi er 1, tænder LED'en og for 0 lyser den.
ugyldigt modtageEvent (int howMany) { byte a = Wire.read (); hvis (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED ON"); } andet { digitalWrite (LED, LOW); Serial.println ("Slave LED OFF"); } forsinkelse (500); }
Produktion
1. Når vi trykker på trykknappen på Master STM32, lyser LED'en tilsluttet Slave Ardiono (hvid).
2. Når vi nu trykker på trykknappen på Slave-siden, tænder LED'en, der er tilsluttet til Master, TIL (rød), og når knappen slippes, slukkes LED'en.
3. Når begge trykknapper trykkede samtidigt på, så lyser begge lysdioderne på samme tid og forbliver TIL, indtil der trykkes på knapperne
Så det er sådan I2C-kommunikation finder sted i STM32. Nu kan du interface enhver I2C-sensor med STM32-kortet.
Den komplette kodning til Master STM32 og Slave Arduino er angivet nedenfor med en demonstrationsvideo