- STM32F103C8 I2C apžvalga
- I2C kaiščiai iš STM32F103C8
- „I2C“ kaiščiai „Arduino“
- Būtini komponentai
- Grandinės schema ir jungtys
- „I2C“ programavimas naudojant STM32
- Pagrindinio STM32 programavimo paaiškinimas
- Vergų „Arduino“ programavimo paaiškinimas
Ankstesnėse mūsų pamokose sužinojome apie SPI ir I2C ryšį tarp dviejų „Arduino“ plokščių. Šioje pamokoje vieną „Arduino“ plokštę pakeisime „Blue Pill“ plokšte, kuri yra STM32F103C8, ir bendrausime su „Arduino“ plokšte naudodami I2C magistralę.
STM32 turi daugiau funkcijų nei „Arduino“ plokštė. Taigi būtų puiku sužinoti apie ryšį tarp STM32 ir „Arduino “ naudojant SPI & I2C magistralę. Šioje pamokoje naudosime „ I2C“ magistralę ryšiui tarp „Arduino“ ir „STM32F103C8“ ir sužinosime apie SPI magistralę kitoje pamokoje. Norėdami sužinoti daugiau apie STM32 plokštę, patikrinkite kitus STM32 projektus.
STM32F103C8 I2C apžvalga
Palyginus „I2C“ („Inter Integrated Circuits“) „STM32F103C8 Blue Pill“ plokštėje su „Arduino Uno“, pamatysime, kad „Arduino“ turi mikrovaldiklį ATMEGA328, o STM32F103C8 - „ARM Cortex-M3“. STM32 turi dvi I2C magistrales, o „Arduino Uno“ turi tik vieną „I2C“ magistralę, o „STM32“ yra greitesnė nei „Arduino“.
Norėdami sužinoti daugiau apie „I2C“ ryšį, skaitykite ankstesnius mūsų straipsnius
- Kaip naudoti „I2C“ sistemoje „Arduino“: Ryšys tarp dviejų „Arduino“ plokščių
- „I2C“ ryšys su PIC mikrovaldikliu PIC16F877
- Sąsaja 16X2 LCD su ESP32 naudojant I2C
- „I2C“ ryšys su „MSP430 Launchpad“
- Sąsajos skystųjų kristalų ekranas su „NodeMCU“ nenaudojant „I2C“
- Kaip tvarkyti daugialypį ryšį (I2C SPI UART) vienoje „Arduino“ programoje
I2C kaiščiai iš STM32F103C8
SDA: PB7 arba PB9, PB11.
SCL: PB6 arba PB8, PB10.
„I2C“ kaiščiai „Arduino“
SDA: A4 kaištis
SCL: A5 kaištis
Būtini komponentai
- STM32F103C8
- Arduino Uno
- LED (2-nr)
- Mygtukas (2-jų)
- Rezistoriai (4 dalių)
- Bandomoji Lenta
- Laidų sujungimas
Grandinės schema ir jungtys
Šioje lentelėje parodytas ryšys tarp STM32 „Blue Pill“ ir „Arduino Uno“ naudojant I2C magistralę. Tam reikia tik dviejų laidų.
STM32F103C8 |
Arduino |
Smeigtuko aprašymas |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
BND |
BND |
Žemė |
Svarbu
- Nepamirškite sujungti „Arduino GND“ ir „STM32F103C8 GND“.
- Tada atskirai prijunkite ištraukiamą 10 k varžą prie abiejų plokščių mygtukų kaiščių.
Šioje „ STM32 I2C“ pamokoje sukonfigūruosime „STM32F103C8“ kaip pagrindinį, o „Arduino“ - kaip vergą. Abi plokštės pritvirtintos atskirai su LED ir mygtuku.
Norėdami parodyti I2C ryšį STM32, mes valdome pagrindinį STM32 šviesos diodą, naudodami vergo „Arduino“ mygtuko vertę, ir valdydami vergo „Arduino“ šviesos diodą, naudodami pagrindinę „STM32F103C8“ mygtuko vertę. Šios vertės siunčiamos per I2C ryšio magistralę.
„I2C“ programavimas naudojant STM32
Programavimas yra panašus į „Arduino“ kodą. Tas pats
Šioje pamokoje yra dvi programos, skirtos meistrui STM32, kitos - vergui „Arduino“. Užbaigtos abiejų šalių programos pateikiamos šio projekto pabaigoje su demonstraciniu vaizdo įrašu.
Pagrindinio STM32 programavimo paaiškinimas
„Master STM32“ pažiūrėkime, kas vyksta:
1. Pirmiausia turime įtraukti „Wire“ biblioteką ir programinės įrangos biblioteką, skirtą naudoti „I2C“ ryšio funkcijas į STM32F103C8.
# įtraukti
2. Neteisingoje sąrankoje ()
- Nuoseklią komunikaciją pradedame 9600 perdavimo sparta.
Serijos pradžia (9600);
- Tada mes pradedame I2C ryšį kaiščiu (B6, B7)
Viela.prasideda ();
3. Tuščia kilpa ()
- Pirmiausia mes gauname duomenis iš „Slave Arduino“, todėl mes naudojame „ requestFrom“ () su vergo adresu 8 ir prašome vieno baito.
Wire.requestFrom (8,1);
Gauta vertė nuskaitoma naudojant „ Wire.read“ ()
baitas a = Wire.read ();
- Atsižvelgiant į gautą vergo vertę, pagrindinis šviesos diodas įjungiamas arba išjungiamas naudojant skaitmeninį įrašymą kaiščiu PA1, taip pat serijinis spausdinimas naudojamas nuosekliojo monitoriaus vertei spausdinti.
if (a == 1) { digitalWrite (LED, HIGH); Serial.println („Pagrindinis šviesos diodas įjungtas“); } else { digitalWrite (LED, LOW); Serial.println („Pagrindinis LED išjungtas“); }
- Toliau turime perskaityti kaiščio PA0, kuris yra pagrindinis STM32 mygtukas, būseną.
int pinvalue = digitalRead (mygtuko segtukas);
- Tada siųskite smeigtuko vertę pagal logiką, todėl mes naudojame if sąlygą, tada pradėkite perduoti vergo „Arduino“ su 8 kaip adresu ir tada parašykite vertę pagal mygtuko įvesties vertę.
if (reikšmė == AUKŠTAS) { x = 1; } dar { x = 0; } Wire.beginTransmission (8); Wire.write (x); „Wire.endTransmission“ ();
Vergų „Arduino“ programavimo paaiškinimas
1. Pirmiausia turime įtraukti „Wire“ biblioteką naudodamiesi I2C ryšio funkcijomis.
# įtraukti
2. Neteisingoje sąrankoje ()
- Nuoseklią komunikaciją pradedame 9600 perdavimo sparta.
Serijos pradžia (9600);
- Tada pradėkite I2C ryšį kaiščiu (A4, A5) su vergo adresu kaip 8. Čia svarbu nurodyti vergo adresą.
Viela.prasideda (8);
Toliau turime iškviesti „ Wire.onReceive“ funkciją, kai „Slave“ gauna vertę iš „master“, o „ Wire.onRequest“ - į skambutį, kai „Master“ reikalauja „Slave“ vertės.
„Wire.onReceive“ („acceptEvent“); „Wire.onRequest“ (requestEvent);
3. Toliau mes turime dvi funkcijas, vieną - prašymo įvykiui ir kitą - renginiui gauti
Užklausos įvykis
Kai pagrindinė STM32 prašys vergo vertės iš vergo, ši funkcija bus vykdoma. Ši funkcija ima įvesties vertę iš „Slave Arduino“ mygtuko ir siunčia baitą (1 arba 0) į „Master STM32“ pagal mygtuko vertę naudodama „ Wire.write“).
void requestEvent () { int vertė = digitalRead (mygtuko segtukas); jei (reikšmė == AUKŠTAS) { x = 1; } dar { x = 0; } Wire.write (x); }
Gauti renginį
Kai „Master“ siunčia duomenis vergui su vergo adresu (8), ši funkcija bus vykdoma. Ši funkcija nuskaito gautą vertę iš pagrindinio kompiuterio ir saugo tipo baito kintamajame, o tada, jei logika, įjunkite arba išjunkite vergo šviesos diodą, atsižvelgiant į gautą vertę. Jei gaunama vertė yra 1, šviesos diodas įsijungia, o 0 - LED išsijungia.
void gautiEvent (int, kiek daug) { baitas a = Wire.read (); if (a == 1) { digitalWrite (LED, HIGH); „Serial.println“ („Slave LED ON“); } else { digitalWrite (LED, LOW); „Serial.println“ („Slave LED OFF“); } vėlavimas (500); }
Rezultatas
1. Paspaudus mygtuką „Master STM32“, „Slave Ardiono“ prijungtas šviesos diodas įsijungia (baltas).
2. Dabar, kai paspaudžiame mygtuką „Slave“, prie pagrindinio įrenginio prijungtas šviesos diodas įsijungia (raudonas), o atleidus mygtuką šviesos diodas išsijungia.
3. Kai abu mygtukai paspaudžiami vienu metu, tada abu šviesos diodai šviečia tuo pačiu metu ir lieka įjungti, kol paspaudžiami mygtukai.
Taigi taip vyksta I2C ryšys STM32. Dabar galite susieti bet kurį „I2C“ jutiklį su „STM32“ plokšte.
Visas „Master STM32“ ir „Slave Arduino“ kodavimas pateiktas žemiau su demonstraciniu vaizdo įrašu