- STM32F103C8 I2C: n yleiskatsaus
- I2C-nastat mallissa STM32F103C8
- I2C-nastat Arduinossa
- Tarvittavat komponentit
- Piirikaavio ja liitännät
- I2C-ohjelmointi STM32: ssä
- Master STM32 -ohjelmoinnin selitys
- Orja-Arduino-ohjelmoinnin selitys
Aikaisemmissa opetusohjelmissamme olemme oppineet SPI- ja I2C-viestinnästä kahden Arduino-levyn välillä. Tässä opetusohjelmassa vaihdamme yhden Arduino-kortin Blue Pill -levyyn, joka on STM32F103C8, ja kommunikoimme Arduino-kortin kanssa I2C-väylää käyttäen.
STM32: lla on enemmän ominaisuuksia kuin Arduino-kortilla. Joten olisi hienoa oppia STM32: n ja Arduinon välisestä viestinnästä SPI & I2C-väylän avulla. Tässä opetusohjelmassa käytämme I2C-väylää kommunikointiin Arduinon ja STM32F103C8 välillä ja opimme SPI-väylästä seuraavassa opetusohjelmassa. Jos haluat tietää enemmän STM32-kortista, tarkista muut STM32-projektit.
STM32F103C8 I2C: n yleiskatsaus
Verrattaessa I2C: tä (Inter Integrated Circuits) STM32F103C8 Blue Pill -levyssä Arduino Unoon, näemme, että Arduinossa on ATMEGA328-mikrokontrolleri ja STM32F103C8: ssa on ARM Cortex-M3. STM32: lla on kaksi I2C-väylää, kun taas Arduino Unolla on vain yksi I2C-väylä ja STM32 on nopeampi kuin Arduino.
Lisätietoja I2C-viestinnästä on aiemmissa artikkeleissamme
- I2C: n käyttö Arduinossa: Kahden Arduino-levyn välinen tiedonsiirto
- I2C-tiedonsiirto PIC-mikrokontrollerin PIC16F877 kanssa
- 16X2 LCD: n ja ESP32: n liitäntä I2C: tä käyttäen
- I2C-tiedonsiirto MSP430 Launchpadin kanssa
- LCD-näytön ja NodeMCU: n yhdistäminen ilman I2C: tä
- Kuinka käsitellä moniviestintää (I2C SPI UART) yhdessä arduinon ohjelmassa
I2C-nastat mallissa STM32F103C8
SDA: PB7 tai PB9, PB11.
SCL: PB6 tai PB8, PB10.
I2C-nastat Arduinossa
SDA: A4-tappi
SCL: A5-tappi
Tarvittavat komponentit
- STM32F103C8
- Arduino Uno
- LED (2-nastainen)
- Painike (2-nastainen)
- Vastukset (4-osaa)
- Leipälauta
- Johtojen liittäminen
Piirikaavio ja liitännät
Seuraava taulukko näyttää yhteyden STM32 Blue Pillin ja Arduino Unon välillä I2C-väylän käyttöä varten. Se vaatii vain kaksi johtoa.
STM32F103C8 |
Arduino |
Nastan kuvaus |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Maa |
Tärkeä
- Älä unohda liittää Arduino GND ja STM32F103C8 GND toisiinsa.
- Liitä sitten 10 k: n alasvetovastus molempien levyjen painonastatappeihin erikseen.
Tässä STM32 I2C -opetusohjelmassa määritämme STM32F103C8: n masteriksi ja Arduinon orjaksi. Molemmat levyt on kiinnitetty LEDillä ja painikkeella erikseen.
I2C-tiedonsiirron osoittamiseksi STM32: ssä ohjaamme master-STM32-LEDiä käyttämällä orja-Arduino-painikkeen arvoa ja ohjaamme orja-Arduino-LEDiä käyttämällä master-STM32F103C8-painikkeen arvoa. Nämä arvot lähetetään I2C-tietoliikenneväylän kautta.
I2C-ohjelmointi STM32: ssä
Ohjelmointi on samanlainen kuin Arduino-koodi. Sama
Tässä opetusohjelmassa on kaksi ohjelmaa, yksi master-STM32: lle ja toinen orja Arduinolle. Molempien osapuolten täydelliset ohjelmat annetaan tämän projektin lopussa esittelyvideolla.
Master STM32 -ohjelmoinnin selitys
Katsotaanpa Master STM32: ssä, mitä tapahtuu:
1. Ensinnäkin meidän on sisällytettävä lankakirjasto ja ohjelmistokirjasto I2C-viestintätoimintojen käyttämiseksi STM32F103C8: een.
#sisältää
2. Tyhjässä asennuksessa ()
- Aloitamme sarjaliikenteen tiedonsiirtonopeudella 9600.
Sarjan alku (9600);
- Seuraavaksi aloitamme I2C-viestinnän tapista (B6, B7)
Wire.begin ();
3. Void-silmukassa ()
- Ensin saamme tiedot Slave Arduinolta, joten käytämme requestFrom () : tä orjaosoitteella 8 ja pyydämme yhden tavun.
Wire.requestFrom (8,1);
Vastaanotettu arvo luetaan käyttämällä Wire.read ()
tavu a = lanka.lue ();
- Riippuen vastaanotetun arvon orja Master LED on kytketty päälle tai pois päältä käyttämällä digitalwrite pin PA1 ja myös sarja tulosta käytetään tulostaa arvon sarja monitori
if (a == 1) { digitalWrite (LED, KORKEA); Serial.println ("Master-LED palaa"); } else { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Seuraavaksi meidän on luettava tapin PA0 tila, joka on master-STM32-painike.
int pinvalue = digitalRead (napinappi);
- Lähetä seuraavaksi pin-arvo logiikan mukaan, joten käytämme if- ehtoa ja aloitamme sitten lähetyksen orja-arduinolla, jonka osoite on 8, ja sitten kirjoitetaan arvo painikkeen syöttöarvon mukaan.
jos (arvo = = KORKEA) { x = 1; } muu { x = 0; } Wire.beginLähetys (8); Wire.write (x); Wire.endTransmission ();
Orja-Arduino-ohjelmoinnin selitys
1. Ensinnäkin meidän on sisällytettävä lankakirjasto I2C-viestintätoimintojen käyttöä varten.
#sisältää
2. Tyhjässä asennuksessa ()
- Aloitamme sarjaliikenteen tiedonsiirtonopeudella 9600.
Sarjan alku (9600);
- Aloita seuraavaksi I2C-tiedonsiirto nastasta (A4, A5) orjaosoitteella 8. Tässä on tärkeää määrittää orjaosoite.
Lanka alkaa (8);
Seuraavaksi meidän on kutsuttava Wire.onReceive- toiminto, kun Slave saa arvon isännältä ja Wire.onRequest- funktiokutsu, kun Master pyytää arvoa Slavelta .
Wire.onReceive (vastaanottaaEvent); Wire.onRequest (requestEvent);
3. Seuraavaksi meillä on kaksi toimintoa, yksi pyynnötapahtumalle ja toinen vastaanottotapahtumalle
Pyyntötapahtuma
Kun Master STM32 pyytää arvoa orjalta, tämä toiminto suoritetaan. Tämä toiminto ottaa syöttöarvon Slave Arduino -painikkeesta ja lähettää tavun (1 tai 0) Master STM32: lle painikkeen arvon mukaan käyttämällä Wire.write ().
void requestEvent () { int arvo = digitalRead (napinappi); jos (arvo == KORKEA) { x = 1; } muu { x = 0; } Wire.write (x); }
Vastaanottotapahtumaan
Kun päällikkö lähettää tietoja orjalle orjaosoitteella (8), tämä toiminto suoritetaan. Tämä toiminto lukee vastaanotetun arvon master ja säilytä muuttuja tyyppiä tavu ja sitten käyttää , jos logiikka kääntää orja LED ON tai OFF riippuen vastaanotetun arvon. Jos vastaanotettu arvo on 1, LED syttyy ja 0 LED sammuu.
void ReceiveEvent (int kuinka monta) { tavu a = lanka.lue (); if (a == 1) { digitalWrite (LED, KORKEA); Serial.println ("Slave-LED palaa"); } else { digitalWrite (LED, LOW); Serial.println ("Slave-merkkivalo POIS"); } viive (500); }
Tuotos
1. Kun painamme Master STM32: n painiketta, Slave Ardionoon kytketty LED syttyy (valkoinen).
2. Kun painamme orjapuolen painiketta, Master-laitteeseen kytketty LED syttyy (punainen) ja kun painike vapautetaan, LED sammuu.
3. Kun molempia painikkeita painetaan samanaikaisesti, molemmat merkkivalot palavat samanaikaisesti ja pysyvät päällä, kunnes painikkeita painetaan
Joten näin I2C-viestintä tapahtuu STM32: ssä. Nyt voit liittää minkä tahansa I2C-anturin STM32-korttiin.
Master STM32: n ja Slave Arduinon täydellinen koodaus on esitetty alla esittelyvideolla