Daftar Isi:
- Langkah 1: Persyaratan Perangkat Keras dan Perangkat Lunak
- Langkah 2: Memahami Masalah
- Langkah 3: Konfigurasi STM32CubeMX
- Langkah 4: Pengembangan Perangkat Lunak Keil
- Langkah 5: Kesimpulan
Video: Tombol STM32CubeMX Debounce Dengan Interupsi: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:55
Hai, dalam tutorial ini saya akan mencoba memberikan solusi sederhana saya untuk mencegah tombol bouncing yang merupakan masalah yang sangat serius. Di internet ada banyak video yang menawarkan solusi untuk masalah ini, tetapi tidak ada video untuk interupsi eksternal. Dalam semua tekan tombol video ini diperiksa dengan metode polling yang tidak efisien. Jadi ayo mulai!
Langkah 1: Persyaratan Perangkat Keras dan Perangkat Lunak
Persyaratan perangkat keras:
- Papan pengembangan ARM STM32
- Komputer
Persyaratan perangkat lunak:
- STM32CubeMX
- Keil uVision5
Langkah 2: Memahami Masalah
Jadi, kami mencoba mencari solusi untuk masalah tombol yang memantul. Oleh karena itu, kita harus memahami masalah ini. Jadi, ketika kita menekan tombol, itu harus datang ke keadaan yang berlawanan dengan keadaan sebelumnya. Misalnya, jika TINGGI harus RENDAH dan jika RENDAH maka harus TINGGI. Namun, ini adalah keadaan ideal (dalam PROTEUS:)) Pada kenyataannya, ketika kita menekan sebuah tombol, tombol itu mulai memantul antara TINGGI dan RENDAH sebelum menjadi keadaan diam. Jadi, berpura-pura telah ditekan beberapa kali yang menyebabkan masalah. Jadi, apa yang harus kita lakukan?
Di sini saya ingin mencatat bahwa dalam contoh ini, kita akan menggunakan interupsi eksternal untuk mendeteksi penekanan tombol. Jadi, setelah kami mendeteksi penekanan tombol, kami perlu menunggu beberapa saat, seperti 50mS untuk mencapai status idle dan memeriksa kembali apakah tombol dalam status idle atau tidak. Jika dalam keadaan idle maka kita dapat melanjutkan tugas kita. Jadi, mari kita lihat kodenya:)
Langkah 3: Konfigurasi STM32CubeMX
Jadi, pertama-tama kita harus mengaktifkan interupsi eksternal untuk tombol tekan kita (saya berasumsi di sini bahwa Anda menggunakan papan penemuan STM32F407VG):
- Pada tab "Pinout & Configuration" klik pada pin PA0 yang terhubung dengan tombol tekan dan pilih GPIO_EXTI0 yang memungkinkan interupsi eksternal pada pin tersebut.
- Ubah "label pengguna" pin menjadi "Push_Button" atau apa pun yang Anda inginkan.
Kemudian, kita perlu mengkonfigurasi timer untuk membuat waktu tunda 50mS:
- Masuk ke bagian "Pengatur Waktu"
- Klik TIM1
- Pilih "Jam Internal" sebagai sumber Jam
-
Dalam konfigurasi (Jika Anda ingin memahami bagian ini, silakan merujuk ke tutorial ini, sangat disarankan "Kontrol Motor Servo Dengan STM32F4 ARM MCU"):
- Tetapkan prescaler sebagai 32000
- Dan periode kontra ke 50
- Di tab "NVIC Settings" aktifkan semua interupsi
Aktifkan LED sebagai output:
Klik pada PD12 dan tetapkan sebagai "GPIO_Output"
Kemudian, konfigurasikan jam seperti pada gambar yang diberikan di atas dan buat kodenya.
Langkah 4: Pengembangan Perangkat Lunak Keil
Pertama, kita mendefinisikan variabel status yang akan memastikan bahwa kita tidak memulai timer di dalam interupsi eksternal saat terjadi pantulan:
/* USER CODE MULAI PFP */bool state = true; /* KODE PENGGUNA AKHIR PFP */
Kemudian, kami menulis ISR untuk interupsi eksternal:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == Push_Button_Pin && state == true){ HAL_TIM_Base_Start_IT(&htim1); negara = salah; } lain{ _NOP(); } }
Saat tombol ditekan, kami memeriksa apakah itu tombol tekan yang kami tentukan dan apakah statusnya benar. Pada awalnya negara akan benar untuk memasukkan pernyataan if. Setelah masuk, kami memulai pengatur waktu dan membuat status salah untuk memastikan bahwa pemantulan tidak akan memulai ulang pengatur waktu.
Kemudian, kami menulis ISR untuk interupsi timer:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ /* Mencegah peringatan kompilasi argumen yang tidak digunakan */ UNUSED(htim);
/* CATATAN: Fungsi ini tidak boleh diubah, ketika panggilan balik diperlukan, HAL_TIM_PeriodElapsedCallback dapat diimplementasikan dalam file pengguna */ if(HAL_GPIO_ReadPin(Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET){ HAL_GPIO_TogglePin(GPIO, GPIO_PIN_12); keadaan = benar; HAL_TIM_Base_Stop_IT(&htim1); } }
/* KODE PENGGUNA AKHIR 4 */
Setelah 50mS kami memeriksa apakah tombol belum dalam keadaan reset atau dilepaskan, jika ya maka kami tahu tombol itu dalam keadaan idle. Kemudian kita nyalakan led, buat status true agar bisa mendeteksi tombol lain tekan dan stop timer agar bisa start lagi.
Jadi, proses ini akan memastikan bahwa kami mencegah masalah bouncing.
Langkah 5: Kesimpulan
Ini adalah kode untuk tombol debounce. Saya ingin mencatat bahwa kode ini dikembangkan oleh saya dan saya bukan programmer ahli. Jadi, pasti ada kesalahan. Jika Anda memiliki solusi yang lebih baik, harap dicatat. Jangan lupa, jika Anda mengalami masalah, silakan tulis saya dan saya akan mencoba membantu.
Direkomendasikan:
Lab Interupsi (Pekerjaan dalam Proses): 3 Langkah
Interrupts Lab (Work in Progress): Tujuan dari lab ini adalah menjalankan program Arduino menggunakan Interrupts. Lab ini tidak sepenuhnya berfungsi dengan benar karena masalah pengkodean. Yang Anda perlukan:- 1 Arduino Uno- 1 Breadboard- 1 tombol tekan- 3 LED- resistor 220 Ohm- Kabel jumper
Desain Pengontrol Interupsi yang Dapat Diprogram di VHDL: 4 Langkah
Desain Pengontrol Interupsi yang Dapat Diprogram di VHDL: Saya kewalahan dengan jenis tanggapan yang saya dapatkan di blog ini. Terima kasih teman-teman telah mengunjungi blog saya dan memotivasi saya untuk berbagi pengetahuan dengan Anda. Kali ini saya akan menyajikan desain modul menarik lainnya yang kita lihat di semua SOC -- Interrupt C
Sensor Efek Aula Arduino Dengan Interupsi: 4 Langkah
Sensor Efek Hall Arduino Dengan Interupsi: Hai Semuanya, Hari ini saya akan menunjukkan kepada Anda bagaimana Anda dapat menghubungkan sensor efek hall ke Arduino dan menggunakannya dengan interupsi. Alat dan bahan yang digunakan dalam video (Tautan afiliasi): Arduino Uno: http ://s.click.aliexpress.com/e/biNyW0zKHall sensor efek: h
Mikrokontroler AVR. LED Flasher Menggunakan Timer. Timer Interupsi. Mode CTC Timer: 6 Langkah
Mikrokontroler AVR. LED Flasher Menggunakan Timer. Timer Interupsi. Mode CTC Timer: Halo semuanya! Timer adalah konsep penting dalam bidang elektronik. Setiap komponen elektronik bekerja pada basis waktu. Basis waktu ini membantu menjaga semua pekerjaan tetap sinkron. Semua mikrokontroler bekerja pada beberapa frekuensi clock yang telah ditentukan
Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah
Arduino Tone Generator Tanpa Fungsi Pustaka atau Serial (Dengan Interupsi): Ini bukan sesuatu yang biasanya saya buat sebagai instruksi, saya lebih suka pekerjaan logam saya, tetapi karena saya seorang mahasiswa teknik elektro dan harus mengambil kelas tentang mikrokontroler ( Desain Sistem Tertanam), saya pikir saya akan membuat instruksi di salah satu p