- STM32F103C8 I2C Pangkalahatang-ideya
- Ang mga I2C ay pin sa STM32F103C8
- I2C pin sa Arduino
- Kinakailangan ang Mga Bahagi
- Circuit Diagram at Mga Koneksyon
- I2C Programming sa STM32
- Paliwanag ng Master STM32 Programming
- Paliwanag ng Slave Arduino Programming
Sa aming nakaraang mga tutorial, nalaman namin ang tungkol sa SPI at I2C na komunikasyon sa pagitan ng dalawang Arduino board. Sa tutorial na ito papalitan namin ang isang board ng Arduino ng Blue Pill board na STM32F103C8 at makikipag-usap sa Arduino board gamit ang I2C bus.
Ang STM32 ay may higit pang mga tampok kaysa sa Arduino board. Kaya't mahusay na malaman ang tungkol sa komunikasyon sa pagitan ng STM32 at Arduino sa pamamagitan ng paggamit ng SPI & I2C bus. Sa tutorial na ito, gagamitin namin ang I2C bus para sa komunikasyon sa pagitan ng Arduino at STM32F103C8, at malalaman ang tungkol sa SPI bus sa susunod na tutorial. Upang malaman ang higit pa tungkol sa board ng STM32, suriin ang iba pang mga proyekto ng STM32.
STM32F103C8 I2C Pangkalahatang-ideya
Ang paghahambing ng I2C (Inter Integrated Circuits) sa STM32F103C8 Blue Pill board kasama ang Arduino Uno, pagkatapos ay makikita natin na ang Arduino ay mayroong ATMEGA328 microcontroller, at ang STM32F103C8 ay mayroong ARM Cortex- M3 dito. Ang STM32 ay mayroong Dalawang I2C bus habang ang Arduino Uno ay mayroon lamang isang I2C bus at ang STM32 ay mas mabilis kaysa sa Arduino.
Upang matuto nang higit pa tungkol sa komunikasyon ng I2C, mag-refer sa aming nakaraang mga artikulo
- Paano gamitin ang I2C sa Arduino: Komunikasyon sa pagitan ng dalawang Arduino Boards
- Pakikipag-usap sa I2C sa PIC Microcontroller PIC16F877
- Ang pagitan ng 16X2 LCD na may ESP32 gamit ang I2C
- Komunikasyon sa I2C sa MSP430 Launchpad
- Ang interface ng LCD sa NodeMCU nang hindi ginagamit ang I2C
- Paano hawakan ang maraming mga komunikasyon (I2C SPI UART) sa solong programa ng arduino
Ang mga I2C ay pin sa STM32F103C8
SDA: PB7 o PB9, PB11.
SCL: PB6 o PB8, PB10.
I2C pin sa Arduino
SDA: A4 pin
SCL: A5 pin
Kinakailangan ang Mga Bahagi
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Pindutan ng Push (2-Nos)
- Mga Resistor (4-Nos)
- Breadboard
- Mga Koneksyon sa Mga Wires
Circuit Diagram at Mga Koneksyon
Ipinapakita ng sumusunod na talahanayan ang koneksyon sa pagitan ng STM32 Blue Pill at Arduino Uno para sa paggamit ng I2C bus. Nangangailangan lamang ito ng dalawang wires.
STM32F103C8 |
Arduino |
Paglalarawan ng Pin |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Lupa |
Mahalaga
- Huwag kalimutan na ikonekta ang Arduino GND at STM32F103C8 GND magkasama.
- Pagkatapos ay ikonekta ang isang Hilahin ang risistor ng 10k sa mga pindutan ng push button ng parehong board nang magkahiwalay.
Sa tutorial na STM32 I2C iko-configure namin ang STM32F103C8 bilang Master at Arduino bilang Alipin. Ang parehong mga board ay naka-attach sa isang LED at isang pindutan ng push nang magkahiwalay.
Upang maipakita ang komunikasyon ng I2C sa STM32, kinokontrol namin ang master STM32 LED sa pamamagitan ng paggamit ng halaga ng pindutan ng push Arduino at kontrolin ang alipin Arduino LED sa pamamagitan ng paggamit ng master button na STM32F103C8 push button. Ang mga halagang ito ay ipinapadala sa pamamagitan ng I2C komunikasyon bus.
I2C Programming sa STM32
Ang programa ay katulad ng Arduino code. Pareho
Ang tutorial na ito ay may dalawang mga programa isa para sa master STM32 at iba pa para sa alipin na Arduino. Ang mga kumpletong programa para sa magkabilang panig ay ibinibigay sa pagtatapos ng proyektong ito na may isang demonstrasyong Video.
Paliwanag ng Master STM32 Programming
Sa Master STM32 tingnan natin kung ano ang nangyayari:
1. Una sa lahat kailangan nating isama ang Wire library at softwire library para sa paggamit ng mga pagpapaandar ng komunikasyon ng I2C sa STM32F103C8.
# isama
2. Sa void setup ()
- Nagsisimula Kami ng Serial Communication sa Baud Rate 9600.
Serial.begin (9600);
- Susunod na sinisimulan namin ang komunikasyon ng I2C sa pin (B6, B7)
Wire.begin ();
3. Sa Void loop ()
- Una naming nakukuha ang data mula sa Slave Arduino kaya gumagamit kami ng requestFrom () kasama ang address ng alipin na 8 at humiling kami ng isang byte.
Wire.requestFrom (8,1);
Ang natanggap na halaga ay binabasa gamit ang Wire.read ()
byte a = Wire.read ();
- Depende sa natanggap na halaga mula sa alipin ang Master LED ay naka-ON o OFF sa pamamagitan ng paggamit ng digitalwrite sa pin PA1 at ginagamit din ang serial print upang i-print ang halaga sa serial monitor
kung (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Master LED ON"); } iba pa { digitalWrite (LED, LOW); Serial.println ("Master LED OFF"); }
- Susunod na kailangan naming basahin ang katayuan ng pin PA0 na ang master button na push STM32.
int pinvalue = digitalRead (buttonpin);
- Susunod na ipadala ang halaga ng pin ayon sa lohika, kaya ginagamit namin kung kundisyon at pagkatapos ay simulan ang paghahatid sa alipin arduino na may 8 bilang address at pagkatapos ay isulat ang halaga ayon sa halaga ng pag-input ng pindutan ng itulak.
kung (pinvalue == MATAAS) { x = 1; } iba pa { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Paliwanag ng Slave Arduino Programming
1. Una sa lahat kailangan nating isama ang Wire library para sa paggamit ng mga pagpapaandar sa komunikasyon ng I2C.
# isama
2. Sa void setup ()
- Nagsisimula Kami ng Serial Communication sa Baud Rate 9600.
Serial.begin (9600);
- Susunod na simulan ang komunikasyon ng I2C sa pin (A4, A5) na may address ng alipin bilang 8. Dito mahalagang tukuyin ang address ng alipin.
Wire.begin (8);
Susunod na kailangan naming tawagan ang Wire.onReceive function kapag ang Alipin ay tumatanggap ng halaga mula sa master at Wire.onRequest function na tawag kapag hiniling ng Master ang halaga mula sa Alipin.
Wire.onReceive (acceptEvent); Wire.onRequest (requestEvent);
3. Susunod mayroon kaming dalawang mga pagpapaandar isa para sa kahilingan sa kaganapan at isa para sa pagtanggap ng kaganapan
Para sa kahilingan sa Kaganapan
Kapag ang halaga ng kahilingan ng Master STM32 mula sa alipin ang pagpapaandar na ito ay isasagawa. Ang pagpapaandar na ito ay tumatagal ng halaga ng pag-input mula sa pindutang push Slave Arduino at magpadala ng isang byte (1 o 0) sa Master STM32 alinsunod sa halaga ng push button sa pamamagitan ng paggamit ng Wire.write ().
void requestEvent () { int value = digitalRead (buttonpin); kung (halaga == TAAS) { x = 1; } iba pa { x = 0; } Wire.write (x); }
Para Makatanggap ng Kaganapan
Kapag nagpadala ang Master ng data sa alipin na may address ng alipin (8), ang pagpapaandar na ito ay papatayin. Binabasa ng pagpapaandar na ito ang natanggap na halaga mula sa master at store sa isang variable ng uri byte at pagkatapos ay gamitin kung ang lohika upang i-ON o OFF ang LED na alipin depende sa natanggap na halaga. Kung ang natanggap na halaga ay 1 pagkatapos ang LED ay ON at para sa 0 LED ay OFF.
void acceptEvent (int howMany) { byte a = Wire.read (); kung (a == 1) { digitalWrite (LED, HIGH); Serial.println ("Alipin LED ON"); } iba pa { digitalWrite (LED, LOW); Serial.println ("Alipin LED OFF"); } pagkaantala (500); }
Paglabas
1. Kapag pinindot namin ang push button sa Master STM32, ang LED na konektado sa Slave Ardiono ay ON (White).
2. Ngayon kapag pinindot namin ang push button sa Slave side, ang LED na konektado sa Master ay ON (Pula) at kapag ang pindutan ay pinakawalan na LED ay naka-OFF.
3. Kapag ang parehong mga pindutan ng push ay pinindot ang simultanewolsy, pagkatapos ay kapwa ang mga LED na kumikinang nang sabay, at mananatiling ON hanggang ang mga pindutan ay pinindot
Kaya't ganito nagaganap ang komunikasyon sa I2C sa STM32. Ngayon ay maaari mong i-interface ang anumang sensor ng I2C na may board na STM32.
Ang kumpletong pag-coding para sa Master STM32 at Slave Arduino ay ibinibigay sa ibaba na may isang demonstration video