- STM32F103C8 I2C pārskats
- I2C tapas STM32F103C8
- I2C tapas Arduino
- Nepieciešamās sastāvdaļas
- Shēmas shēma un savienojumi
- I2C programmēšana STM32
- Master STM32 programmēšanas skaidrojums
- Slave Arduino programmēšanas skaidrojums
Iepriekšējās apmācībās mēs esam iemācījušies par SPI un I2C komunikāciju starp divām Arduino plāksnēm. Šajā apmācībā mēs aizstāsim vienu Arduino dēli ar Blue Pill dēli, kas ir STM32F103C8, un sazināsimies ar Arduino dēli, izmantojot I2C kopni.
STM32 ir vairāk funkciju nekā Arduino dēlī. Tāpēc būtu lieliski uzzināt par saziņu starp STM32 un Arduino, izmantojot SPI & I2C kopni. Šajā apmācībā mēs izmantosim I2C kopni saziņai starp Arduino un STM32F103C8, un nākamajā apmācībā uzzināsim par SPI kopni. Lai uzzinātu vairāk par STM32 dēli, pārbaudiet citus STM32 projektus.
STM32F103C8 I2C pārskats
Salīdzinot I2C (Inter Integrated Circuits) STM32F103C8 Blue Pill dēlī ar Arduino Uno, tad redzēsim, ka Arduino ir ATMEGA328 mikrokontrolleris un STM32F103C8 ir ARM Cortex-M3. STM32 ir divas I2C kopnes, savukārt Arduino Uno ir tikai viena I2C kopne, un STM32 ir ātrāka nekā Arduino.
Lai uzzinātu vairāk par I2C komunikāciju, skatiet mūsu iepriekšējos rakstus
- Kā lietot I2C Arduino: saziņa starp diviem Arduino dēļiem
- I2C sakari ar PIC mikrokontrolleru PIC16F877
- Saskarne 16X2 LCD ar ESP32, izmantojot I2C
- I2C saziņa ar MSP430 Launchpad
- LCD saskarne ar NodeMCU, neizmantojot I2C
- Kā rīkoties ar vairākiem sakariem (I2C SPI UART) vienā arduino programmā
I2C tapas STM32F103C8
SDA: PB7 vai PB9, PB11.
SCL: PB6 vai PB8, PB10.
I2C tapas Arduino
SDA: A4 tapa
SCL: A5 tapa
Nepieciešamās sastāvdaļas
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Spiedpoga (2-Nos)
- Rezistori (4-Nos)
- Maizes dēlis
- Vadu savienošana
Shēmas shēma un savienojumi
Šajā tabulā parādīts savienojums starp STM32 Blue Pill un Arduino Uno, lai izmantotu I2C kopni. Tam nepieciešami tikai divi vadi.
STM32F103C8 |
Arduino |
Piespraudes apraksts |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Zeme |
Svarīgs
- Neaizmirstiet savienot Arduino GND un STM32F103C8 GND kopā.
- Tad pievienojiet 10k nolaišanās rezistoru pie abu dēļu spiedpogas tapām atsevišķi.
Šajā STM32 I2C apmācībā mēs konfigurēsim STM32F103C8 kā Master un Arduino kā Slave. Abi dēļi ir piestiprināti ar LED un spiedpogu atsevišķi.
Lai demonstrētu I2C komunikāciju STM32, mēs kontrolējam galveno STM32 LED, izmantojot vergu Arduino spiedpogas vērtību, un kontrolējam vergu Arduino LED, izmantojot galvenā STM32F103C8 spiedpogas vērtību. Šīs vērtības tiek nosūtītas, izmantojot I2C sakaru kopni.
I2C programmēšana STM32
Programmēšana ir līdzīga Arduino kodam. Tas pats
Šajā apmācībā ir divas programmas, viena - meistaram STM32, bet otra - vergam Arduino. Pilnīgas programmas abām pusēm ir norādītas šī projekta beigās ar demonstrācijas video.
Master STM32 programmēšanas skaidrojums
Apskatīsim Master STM32, kas notiek:
1. Vispirms mums ir jāiekļauj Wire bibliotēka un programmatūras bibliotēka I2C sakaru funkciju izmantošanai STM32F103C8.
# iekļaut
2. Tukšajā iestatījumā ()
- Mēs sākam sērijveida saziņu ar Baud likmi 9600.
Sērijas sākums (9600);
- Pēc tam mēs sākam I2C sakarus ar tapu (B6, B7)
Wire.begin ();
3. Void loop ()
- Vispirms mēs iegūstam datus no Slave Arduino, tāpēc mēs izmantojam requestFrom () ar verga adresi 8 un mēs pieprasām vienu baitu.
Wire.requestFrom (8,1);
Saņemtā vērtība tiek nolasīta, izmantojot Wire.read ()
baits a = Wire.read ();
- Atkarībā no saņemtās vērtības no verga, galvenā gaismas diode tiek ieslēgta vai izslēgta, izmantojot ciparu rakstīšanu tapā PA1, un sērijveida monitorā vērtības drukāšanai tiek izmantota arī sērijveida druka
ja (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Galvenā LED ieslēgta"); } cits { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Tālāk mums ir jāizlasa tapas PA0 statuss, kas ir galvenā STM32 spiedpoga.
int pinvalue = digitalRead (piespraudes);
- Pēc tam nosūtiet piespraudes vērtību atbilstoši loģikai, tāpēc mēs izmantojam if nosacījumu un pēc tam sāciet pārraidi ar vergu arduino ar 8 kā adresi un pēc tam uzrakstiet vērtību atbilstoši spiedpogas ievades vērtībai.
ja (pinvalue == AUGSTS) { x = 1; } cits { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Slave Arduino programmēšanas skaidrojums
1. Vispirms mums jāiekļauj Wire bibliotēka, lai izmantotu I2C sakaru funkcijas.
# iekļaut
2. Tukšajā iestatījumā ()
- Mēs sākam sērijveida saziņu ar Baud likmi 9600.
Sērijas sākums (9600);
- Pēc tam sāciet I2C sakarus ar tapu (A4, A5) ar verga adresi kā 8. Šeit ir svarīgi norādīt verga adresi.
Stieple.sākas (8);
Pēc tam mums jāzvana funkcija Wire.onReceive, kad vergs saņem vērtību no galvenā un Wire.onRequest funkcijas izsaukuma, kad galvenais pieprasa vērtību no Slave.
Wire.onReceive (gautiEvent); Wire.onRequest (requestEvent);
3. Tālāk mums ir divas funkcijas - viena pieprasījuma notikumam un otra - notikuma saņemšanai
Pēc pieprasījuma Notikums
Kad Master STM32 pieprasa vērtību no verga, šī funkcija tiks izpildīta. Šī funkcija ņem ievades vērtību no Slave Arduino spiedpogas un nosūta baitu (1 vai 0) Master STM32 atbilstoši spiedpogas vērtībai, izmantojot Wire.write ().
void requestEvent () { int vērtība = digitalRead (pogas piespraude); ja (vērtība == AUGSTA) { x = 1; } cits { x = 0; } Vads.rakstīt (x); }
Saņemšanas pasākumam
Kad Master nosūta datus vergam ar verga adresi (8), šī funkcija tiks izpildīta. Šī funkcija nolasa saņemto vērtību no galvenā un glabājama tipa baita mainīgajā un pēc tam izmanto log loģiku, lai ieslēgtu vai izslēgtu slave LED atkarībā no saņemtās vērtības. Ja saņemtā vērtība ir 1, gaismas diode ieslēdzas un 0 LED izslēdzas.
void ReceiveEvent (int, cik daudz) { baits a = Wire.read (); ja (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Slave LED ON"); } cits { digitalWrite (LED, LOW); Serial.println ("Slave LED OFF"); } kavēšanās (500); }
Rezultāts
1. Nospiežot spiedpogu pie Master STM32, Slave Ardiono pievienotā gaismas diode iedegas (balta).
2. Tagad, kad mēs nospiežam spiedpogu vergu pusē, Master savienotais LED iedegas (sarkans) un, kad poga tiek atlaista, LED izslēdzas.
3. Kad abas spiedpogas tiek nospiestas vienlaicīgi, tad abas gaismas diodes vienlaikus mirgo un paliek ieslēgtas, līdz tiek nospiestas
Tātad šādi I2C komunikācija notiek STM32. Tagad jūs varat saskarnē jebkuru I2C sensoru ar STM32 paneli.
Pilns Master STM32 un Slave Arduino kodējums ir sniegts zemāk ar demonstrācijas video