
Halo
Deskripsi perpustakaan untuk membaca, mendekode dan mengirim sinyal infra merah dari berbagai remote rumah menggunakan mikrokontroler stm32. Berdasarkan
perpustakaan IRremote untuk arduino, dan diadaptasi untuk stm32.
Perpustakaan menggunakan satu pengatur waktu, baik untuk menerima maupun mengirim sinyal. Penerima terhubung ke pin apa saja (GPIO_Input), dan pemancar terhubung ke salah satu saluran timer yang bekerja dalam mode PWM Generation (PWM). Dalam contoh, saluran pertama penghitung waktu No. 4 digunakan - PB6 (pemancar) dan pin PB5 (penerima).
Untuk menerima sinyal, timer beroperasi dalam mode interupsi - setiap 50 μs itu memeriksa status pin input, dan selama transmisi beralih ke mode PWM Generation, mengirim sinyal, dan beralih kembali ke mode interupsi.
Pengaturan ada di file IRremote.h
extern TIM_HandleTypeDef htim4;
Jika Anda akan mengkonfigurasi timer lain, Anda perlu menentukan nama struktur yang sesuai - htim4, dan melakukan hal yang sama pada file IRremote. dan irSend.. Saya terlalu malas untuk mendefinisikan semua ekonomi ini. Saat memilih timer lain di Kuba, Anda hanya perlu menentukan saluran dan sumber jam internal ...

Program akan mengonfigurasi semua yang lain. Jika Anda memilih nomor saluran yang berbeda, maka Anda juga harus mengganti nama di file irSend.s.
Dengan sisa pengaturan, saya pikir semuanya jelas - berdasarkan frekuensi sistem (dalam contoh 72 MHz), nilai pre-splitter dan overflow diganti untuk interupsi setiap 50 μs. Berikut ini menunjukkan frekuensi dan pembacaan pin.
Di bawah ini adalah definisi yang mendefinisikan protokol yang terlibat ...
Menonaktifkan protokol yang tidak perlu mengurangi ukuran program. Pada prinsipnya, Anda umumnya dapat memotong fungsi protokol yang tidak digunakan dan file yang sesuai (file memiliki nama karakteristik).
Program ini sangat sederhana, fungsi my_decode (& hasil) menerjemahkan sinyal yang diterima dan menampilkan kode tombol, jenis protokol dan panjang paket ...

Saya tidak punya remote lainnya.
Untuk mengirim sinyal yang didekodekan, gunakan fungsi dengan nama yang sesuai ...
sendSAMSUNG(0x707048b7, 32); my_enableIRIn();
Fungsi my_enableIRIn () diperlukan, ia menonaktifkan PWM dan menempatkan timer dalam mode terima. Fungsi yang sama digunakan untuk inisialisasi (sebelum infinite loop). Karena fungsi ini, Anda tidak akan dapat menangkap sinyal Anda sendiri - ini bisa diselesaikan, tetapi saya tidak melihat gunanya.
Jika Anda tidak dapat menentukan jenis protokol ...

... maka tidak ada yang perlu dikhawatirkan, kode tombol diterima pula.
Jika Anda tidak hanya perlu menerima sinyal yang tidak dikenal, tetapi juga mengirimkannya, maka Anda harus menghapus tanda komentar garis untuk "output data mentah" ...

... dan mengirim data baca menggunakan fungsi sendRaw () ...
uint8_t khz = 38;
Mengirim saya "mentah" tidak bekerja untuk saya.
Perpustakaan menggunakan penghitung DWT untuk penundaan mikrodetik. Sejauh yang saya tahu, tidak semua stm32 memilikinya, dan ada kemungkinan bahwa tidak semua konfigurasi sama. Jika batu Anda tidak memiliki DWT, maka Anda perlu membuat sesuatu untuk menggantikan dalam fungsi custom_delay_usec (unsigned long us) di akhir file irSend.s, pengaturannya ada di awal.
Itu saja.
Perpustakaan