- STM32F103C8 I2C Oversikt
- I2C-pinner i STM32F103C8
- I2C-pinner i Arduino
- Komponenter kreves
- Kretsdiagram og tilkoblinger
- I2C programmering i STM32
- Master STM32 Programmering Forklaring
- Slave Arduino Programmering Forklaring
I våre tidligere veiledninger har vi lært om SPI og I2C kommunikasjon mellom to Arduino-kort. I denne opplæringen vil vi erstatte ett Arduino-kort med Blue Pill-kortet som er STM32F103C8 og vil kommunisere med Arduino-kortet ved hjelp av I2C-buss.
STM32 har flere funksjoner enn Arduino-kortet. Så det ville være flott å lære om kommunikasjon mellom STM32 og Arduino ved å bruke SPI & I2C-buss. I denne opplæringen vil vi bruke I2C-buss for kommunikasjon mellom Arduino og STM32F103C8, og vil lære om SPI-buss i neste opplæring. For å vite mer om STM32-kortet, sjekk andre STM32-prosjekter.
STM32F103C8 I2C Oversikt
Sammenligning av I2C (Inter Integrated Circuits) i STM32F103C8 Blue Pill-kort med Arduino Uno, så ser vi at Arduino har ATMEGA328 mikrokontroller i seg, og STM32F103C8 har ARM Cortex-M3 i seg. STM32 har to I2C-busser mens Arduino Uno bare har en I2C-buss og STM32 er raskere enn Arduino.
For å lære mer om I2C-kommunikasjon, se våre tidligere artikler
- Hvordan bruke I2C i Arduino: Kommunikasjon mellom to Arduino-brett
- I2C Kommunikasjon med PIC Microcontroller PIC16F877
- Grensesnitt 16X2 LCD med ESP32 ved bruk av I2C
- I2C-kommunikasjon med MSP430 Launchpad
- Grensesnitt LCD med NodeMCU uten å bruke I2C
- Hvordan håndtere multikommunikasjon (I2C SPI UART) i enkelt program av arduino
I2C-pinner i STM32F103C8
SDA: PB7 eller PB9, PB11.
SCL: PB6 eller PB8, PB10.
I2C-pinner i Arduino
SDA: A4-pinne
SCL: A5 pin
Komponenter kreves
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Trykknapp (2-Nos)
- Motstander (4-Nos)
- Brettbrett
- Koble ledninger
Kretsdiagram og tilkoblinger
Tabellen nedenfor viser forbindelsen mellom STM32 Blue Pill og Arduino Uno for bruk av I2C-buss. Det krever bare to ledninger.
STM32F103C8 |
Arduino |
Pin Beskrivelse |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Bakke |
Viktig
- Ikke glem å koble Arduino GND og STM32F103C8 GND sammen.
- Koble deretter en trekk ned motstand på 10k til trykknapppinnene på begge brettet separat.
I denne STM32 I2C-opplæringen konfigurerer vi STM32F103C8 som Master og Arduino som Slave. Begge brettene er festet med en LED og en trykknapp separat.
For å demonstrere I2C-kommunikasjon i STM32 styrer vi master STM32 LED ved å bruke slave Arduino trykknappverdi og kontrollere slave Arduino LED ved å bruke master STM32F103C8 trykknappverdi. Disse verdiene sendes via I2C kommunikasjonsbuss.
I2C programmering i STM32
Programmeringen ligner på Arduino-koden. Det samme
Denne opplæringen har to programmer, ett for master STM32 og et annet for slave Arduino. Komplette programmer for begge sider er gitt på slutten av dette prosjektet med en demonstrasjonsvideo.
Master STM32 Programmering Forklaring
La oss i Master STM32 se hva som skjer:
1. Først og fremst må vi inkludere Wire-biblioteket og softwire-biblioteket for bruk av I2C-kommunikasjonsfunksjoner i STM32F103C8.
#inkludere
2. I ugyldig oppsett ()
- Vi starter seriekommunikasjon med Baud Rate 9600.
Serial.begin (9600);
- Deretter starter vi I2C-kommunikasjonen ved pin (B6, B7)
Wire.begin ();
3. I ugyldig løkke ()
- Først får vi dataene fra Slave Arduino, så vi bruker requestFrom () med slaveadressen 8 og vi ber om en byte.
Wire.requestFrom (8,1);
Den mottatte verdien leses ved hjelp av Wire.read ()
byte a = Wire.read ();
- Avhengig av mottatt verdi fra slave, slås Master-LED-en PÅ eller AV ved å bruke digitalwrite på pin PA1, og også seriell utskrift brukes til å skrive ut verdi i seriell skjerm
hvis (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Master LED ON"); } annet { digitalWrite (LED, LAV); Serial.println ("Master LED OFF"); }
- Deretter må vi lese statusen til pinnen PA0 som er master STM32 trykknapp.
int pinvalue = digitalRead (buttonpin);
- Deretter sender du pinverdien i henhold til logikken, så vi bruker if condition og begynner deretter overføringen med slave arduino med 8 som adresse og skriv deretter verdien i henhold til trykknappens inngangsverdi.
hvis (pinvalue == HIGH) { x = 1; } annet { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Slave Arduino Programmering Forklaring
1. Først og fremst må vi inkludere Wire-biblioteket for bruk av I2C-kommunikasjonsfunksjoner.
#inkludere
2. I ugyldig oppsett ()
- Vi starter seriekommunikasjon med Baud Rate 9600.
Serial.begin (9600);
- Start deretter I2C-kommunikasjonen på pin (A4, A5) med slave-adresse som 8. Her er det viktig å spesifisere slave-adressen.
Wire.begin (8);
Deretter må vi ringe Wire.onReceive- funksjonen når Slave mottar verdi fra master og Wire.onRequest- funksjonsanrop når Master-forespørselsverdi fra Slave.
Wire.onReceive (receiveEvent); Wire.onRequest (requestEvent);
3. Neste har vi to funksjoner en for forespørselshendelse og en for motta hendelse
For anmodning Event
Når Master STM32-forespørselsverdi fra slave vil denne funksjonen utføres. Denne funksjonen tar inngangsverdien fra Slave Arduino-trykknappen og sender en byte (1 eller 0) til Master STM32 i henhold til trykknappverdien ved hjelp av Wire.write ().
void requestEvent () { int value = digitalRead (buttonpin); hvis (verdi == HØY) { x = 1; } annet { x = 0; } Wire.write (x); }
For motta hendelse
Når Master sender data til slave med slave-adresse (8), vil denne funksjonen utføres. Denne funksjonen leser den mottatte verdien fra master og lagrer i en variabel av typen byte, og bruk deretter hvis logikk for å slå slave-LED PÅ eller AV, avhengig av mottatt verdi. Hvis mottatt verdi er 1, slås LED PÅ og for 0 LED slås AV.
ugyldig mottaEvent (int howMany) { byte a = Wire.read (); hvis (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED ON"); } annet { digitalWrite (LED, LAV); Serial.println ("Slave LED OFF"); } forsinkelse (500); }
Produksjon
1. Når vi trykker på trykknappen på Master STM32, lyser LED-en som er koblet til Slave Ardiono (hvit).
2. Når vi nå trykker på trykknappen på Slave-siden, slås LED-en som er koblet til Master PÅ (rød), og når knappen slippes slukkes LED-en.
3. Når begge trykknappene trykkes samtidig, lyser begge lysdiodene samtidig og forblir PÅ til knappene trykkes
Så dette er hvordan I2C-kommunikasjon foregår i STM32. Nå kan du grense en hvilken som helst I2C-sensor med STM32-kortet.
Den komplette kodingen for Master STM32 og Slave Arduino er gitt nedenfor med en demonstrasjonsvideo