- Tinjauan STM32F103C8 I2C
- Pin I2C dalam STM32F103C8
- Pin I2C di Arduino
- Komponen Diperlukan
- Diagram dan Sambungan Litar
- Pengaturcaraan I2C dalam STM32
- Penjelasan Pengaturcaraan Master STM32
- Penjelasan Pengaturcaraan Slave Arduino
Dalam tutorial sebelumnya, kami telah mempelajari komunikasi SPI dan I2C antara dua papan Arduino. Dalam tutorial ini kita akan mengganti satu papan Arduino dengan papan Pill Biru iaitu STM32F103C8 dan akan berkomunikasi dengan papan Arduino menggunakan bas I2C.
STM32 mempunyai lebih banyak ciri daripada papan Arduino. Oleh itu, adalah baik untuk belajar mengenai komunikasi antara STM32 dan Arduino dengan menggunakan bas SPI & I2C. Dalam tutorial ini, kami akan menggunakan bas I2C untuk komunikasi antara Arduino dan STM32F103C8, dan akan belajar mengenai bas SPI pada tutorial seterusnya. Untuk mengetahui lebih lanjut mengenai papan STM32, periksa projek STM32 yang lain.
Tinjauan STM32F103C8 I2C
Membandingkan I2C (Inter Integrated Circuits) di papan Pill Blue STM32F103C8 dengan Arduino Uno, maka kita akan melihat bahawa Arduino mempunyai mikrokontroler ATMEGA328 di dalamnya, dan STM32F103C8 mempunyai ARM Cortex- M3 di dalamnya. STM32 mempunyai bas Dua I2C sementara Arduino Uno hanya mempunyai satu bas I2C dan STM32 lebih pantas daripada Arduino.
Untuk mengetahui lebih lanjut mengenai komunikasi I2C, rujuk artikel kami sebelumnya
- Cara menggunakan I2C di Arduino: Komunikasi antara dua Papan Arduino
- Komunikasi I2C dengan PIC Microcontroller PIC16F877
- Memadankan LCD 16X2 dengan ESP32 menggunakan I2C
- Komunikasi I2C dengan MSP430 Launchpad
- Memadankan LCD dengan NodeMCU tanpa menggunakan I2C
- Cara mengendalikan pelbagai komunikasi (I2C SPI UART) dalam satu program arduino
Pin I2C dalam STM32F103C8
SDA: PB7 atau PB9, PB11.
SCL: PB6 atau PB8, PB10.
Pin I2C di Arduino
SDA: Pin A4
SCL: Pin A5
Komponen Diperlukan
- STM32F103C8
- Arduino Uno
- LED (2-Nos)
- Butang Tekan (2-Nos)
- Perintang (4-Nos)
- Papan roti
- Wayar Penyambung
Diagram dan Sambungan Litar
Jadual berikut menunjukkan hubungan antara STM32 Blue Pill dan Arduino Uno untuk menggunakan bas I2C. Ia hanya memerlukan dua wayar.
STM32F103C8 |
Arduino |
Huraian Pin |
B7 |
A4 |
SDA |
B6 |
A5 |
SCL |
GND |
GND |
Tanah |
Penting
- Jangan lupa untuk menyambungkan Arduino GND dan STM32F103C8 GND bersama-sama.
- Kemudian sambungkan resistor Pull down 10k ke pin butang tekan kedua-dua papan secara berasingan.
Dalam tutorial STM32 I2C ini kita akan mengkonfigurasi STM32F103C8 sebagai Master dan Arduino sebagai Slave. Kedua-dua papan dipasang dengan LED & butang tekan secara berasingan.
Untuk menunjukkan komunikasi I2C dalam STM32, kami mengendalikan induk STM32 induk dengan menggunakan nilai butang tekan hamba Arduino dan mengawal LED Arduino hamba dengan menggunakan nilai butang tekan STM32F103C8 induk. Nilai-nilai ini dihantar melalui bas komunikasi I2C.
Pengaturcaraan I2C dalam STM32
Pengaturcaraannya serupa dengan kod Arduino. Sama
Tutorial ini mempunyai dua program satu untuk master STM32 dan satu lagi untuk hamba Arduino. Program lengkap untuk kedua-dua belah pihak diberikan pada akhir projek ini dengan Video demonstrasi.
Penjelasan Pengaturcaraan Master STM32
Di Master STM32 mari kita lihat apa yang berlaku:
1. Pertama sekali kita perlu memasukkan perpustakaan Wire dan perpustakaan softwire untuk menggunakan fungsi komunikasi I2C dalam STM32F103C8.
#sertakan
2. Dalam persediaan tidak sah ()
- Kami Memulakan Komunikasi Bersiri pada Baud Rate 9600.
Serial.begin (9600);
- Seterusnya kita memulakan komunikasi I2C di pin (B6, B7)
Wire.begin ();
3. Dalam gelung Void ()
- Mula-mula kami mendapatkan data dari Slave Arduino sehingga kami menggunakan requestFrom () dengan alamat hamba 8 dan kami meminta satu bait.
Wire.requestDari (8,1);
Nilai yang diterima dibaca menggunakan Wire.read ()
bait a = Wire.read ();
- Bergantung pada nilai yang diterima dari hamba, LED Master dihidupkan atau dimatikan dengan menggunakan digitalwrite pada pin PA1 dan juga cetak bersiri digunakan untuk mencetak nilai pada monitor bersiri
jika (a == 1) { digitalWrite (LED, TINGGI); Serial.println ("Master LED ON"); } lain { digitalWrite (LED, RENDAH); Serial.println ("Master LED OFF"); }
- Seterusnya kita perlu membaca status pin PA0 yang merupakan butang STM32 induk.
int pinvalue = digitalRead (butang pin);
- Seterusnya kirimkan nilai pin sesuai dengan logiknya, jadi kita gunakan jika syarat dan kemudian mulailah transmisi dengan slave arduino dengan 8 sebagai alamat dan kemudian tuliskan nilainya sesuai dengan nilai input butang tekan.
jika (nilai pin == TINGGI) { x = 1; } lain { x = 0; } Wire.beginTransmission (8); Wire.write (x); Wire.endTransmission ();
Penjelasan Pengaturcaraan Slave Arduino
1. Pertama sekali kita perlu memasukkan perpustakaan Wire untuk menggunakan fungsi komunikasi I2C.
#sertakan
2. Dalam persediaan tidak sah ()
- Kami Memulakan Komunikasi Bersiri pada Baud Rate 9600.
Serial.begin (9600);
- Seterusnya mulakan komunikasi I2C di pin (A4, A5) dengan alamat hamba sebagai 8. Di sini penting untuk menentukan alamat hamba.
Wire.begin (8);
Seterusnya kita perlu memanggil fungsi Wire.onReceive apabila Slave menerima nilai dari master dan fungsi Wire.onRequest ketika nilai permintaan Master dari Slave.
Wire.onReceive (menerimaEvent); Wire.onRequest (requestEvent);
3. Seterusnya kita mempunyai dua fungsi satu untuk acara permintaan dan satu untuk acara terima
Untuk permintaan Acara
Apabila nilai permintaan Master STM32 dari hamba fungsi ini akan dilaksanakan. Fungsi ini memang mengambil nilai input dari butang Slave Arduino dan menghantar bait (1 atau 0) ke Master STM32 mengikut nilai butang tekan dengan menggunakan Wire.write ().
batal requestEvent () { int value = digitalRead (buttonpin); jika (nilai == TINGGI) { x = 1; } lain { x = 0; } Wire.write (x); }
Untuk Acara Terima
Apabila Master mengirimkan data ke hamba dengan alamat budak (8), fungsi ini akan dilaksanakan. Fungsi ini membaca nilai yang diterima dari induk dan simpan dalam pemboleh ubah jenis byte dan kemudian gunakan jika logik untuk menghidupkan atau mematikan LED budak bergantung pada nilai yang diterima. Sekiranya nilai yang diterima adalah 1 maka LED menyala dan untuk 0 LED mati.
batal menerimaEvent (int howMany) { byte a = Wire.read (); jika (a == 1) { digitalWrite (LED, TINGGI); Serial.println ("Slave LED ON"); } lain { digitalWrite (LED, RENDAH); Serial.println ("Slave LED OFF"); } kelewatan (500); }
Pengeluaran
1. Semasa kita menekan butang tekan pada Master STM32, LED yang disambungkan ke Slave Ardiono akan menyala (Putih).
2. Sekarang apabila kita menekan butang tekan di sebelah Slave, LED yang disambungkan ke Master AKTIF (Merah) dan apabila butang dilepaskan LED mati.
3. Apabila kedua-dua butang tekan ditekan secara simultanewolsy, maka kedua LED menyala pada masa yang sama, dan tetap HIDUP sehingga butang ditekan
Jadi ini adalah bagaimana komunikasi I2C berlaku di STM32. Sekarang anda boleh menghubungkan antara sensor I2C dengan papan STM32.
Pengekodan lengkap untuk Master STM32 dan Slave Arduino diberikan di bawah dengan video demonstrasi