Isi kandungan:

Butang STM32CubeMX Melantun Dengan Selang: 5 Langkah
Butang STM32CubeMX Melantun Dengan Selang: 5 Langkah

Video: Butang STM32CubeMX Melantun Dengan Selang: 5 Langkah

Video: Butang STM32CubeMX Melantun Dengan Selang: 5 Langkah
Video: Программирование STM32 Blue Pill с помощью релейной логики ПЛК LDmicro 2024, Julai
Anonim
Butang STM32CubeMX Melantun Dengan Selang
Butang STM32CubeMX Melantun Dengan Selang

Hai, dalam tutorial ini saya akan cuba memberikan penyelesaian mudah untuk mengelakkan pantulan butang yang merupakan masalah yang sangat serius. Di internet terdapat banyak video untuk menawarkan penyelesaian untuk masalah ini, tetapi bukan video untuk gangguan luaran. Dalam semua video ini tekan butang diperiksa dengan kaedah pengundian yang tidak efisien. Oleh itu, mari kita mulakan!

Langkah 1: Keperluan Perkakasan dan Perisian

Keperluan perkakasan:

  • Lembaga pengembangan ARM STM32
  • Komputer

Keperluan perisian:

  • STM32CubeMX
  • Keil uVision5

Langkah 2: Memahami Masalah

Memahami Masalah
Memahami Masalah

Oleh itu, kami cuba mencari jalan keluar untuk masalah pantulan butang. Oleh itu, kita harus memahami masalahnya. Oleh itu, apabila kita menekan butang, ia harus menjadi keadaan yang bertentangan dengan keadaan sebelumnya. Contohnya, jika TINGGI ia mesti RENDAH dan jika RENDAH, maka TINGGI. Walau bagaimanapun, ini adalah keadaan ideal (dalam PROTEUS:)) Pada hakikatnya, apabila kita menekan butang, ia mula melantun antara TINGGI dan RENDAH sebelum ia berada dalam keadaan terbiar. Jadi, berpura-pura bahawa ia telah ditekan beberapa kali yang menimbulkan masalah. Jadi, apa yang harus kita lakukan?

Di sini saya ingin perhatikan bahawa dalam contoh ini, kita akan menggunakan gangguan luaran untuk mengesan tekan butang. Oleh itu, setelah kita mengesan tekan butang, kita perlu menunggu sedikit masa, seperti 50mS untuk mencapai keadaan tidak aktif dan periksa semula sama ada butang berada dalam keadaan tidak aktif atau tidak. Sekiranya dalam keadaan tidak berfungsi maka kita dapat meneruskan tugas kita. Oleh itu, mari lihat kodnya:)

Langkah 3: Konfigurasi STM32CubeMX

Konfigurasi STM32CubeMX
Konfigurasi STM32CubeMX

Oleh itu, kita perlu terlebih dahulu mengaktifkan gangguan luaran untuk butang tekan kita (saya anggap di sini bahawa anda menggunakan papan penemuan STM32F407VG):

  • Pada tab "Pinout & Configuration" klik pada pin PA0 yang disambungkan ke butang tekan dan pilih GPIO_EXTI0 yang membolehkan gangguan luaran pada pin tersebut.
  • Tukar "label pengguna" pin menjadi "Push_Button" atau apa sahaja yang anda mahukan.

Kemudian, kita perlu mengkonfigurasi pemasa untuk membuat kelewatan masa 50mS:

  • Masukkan bahagian "Pemasa"
  • Klik pada TIM1
  • Pilih "Jam Dalaman" sebagai sumber Jam
  • Dalam konfigurasi (Sekiranya anda ingin memahami bahagian ini, sila rujuk tutorial ini, "Kawalan Motor Servo Dengan STM32F4 ARM MCU" sangat disyorkan):

    • Tetapkan prescaler sebagai 32000
    • Dan tempoh kaunter hingga 50
  • Di tab "Tetapan NVIC" aktifkan semua gangguan

Dayakan LED sebagai output:

Klik pada PD12 dan tetapkan sebagai "GPIO_Output"

Kemudian, konfigurasikan jam seperti dalam gambar yang diberikan di atas dan hasilkan kodnya.

Langkah 4: Pembangunan Perisian Keil

Pertama, kita menentukan pemboleh ubah keadaan yang akan memastikan bahawa kita tidak memulakan pemasa di dalam gangguan luaran ketika berlaku pantulan:

/ * KOD PENGGUNA BEGIN PFP * / keadaan bool = benar; / * PFP AKHIR KOD PENGGUNA * /

Kemudian, kami menulis ISR untuk gangguan luaran:

batal HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); nyatakan = salah; } lain {_NOP (); }}

Apabila butang ditekan, kami memeriksa apakah itu butang tekan yang ditentukan dan sama ada keadaannya benar. Pada awalnya keadaan akan benar untuk memasukkan pernyataan if. Setelah masuk, kami memulakan pemasa dan membuat keadaan tidak benar untuk memastikan bahawa memantul tidak akan memulakan semula pemasa.

Kemudian, kami menulis ISR untuk gangguan pemasa:

batal HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Cegah peringatan kompilasi argumen yang tidak digunakan * / TIDAK DIGUNAKAN (htim);

/ * CATATAN: Fungsi ini tidak boleh diubah, apabila panggilan balik diperlukan, HAL_TIM_PeriodElapsedCallback boleh dilaksanakan dalam fail pengguna * / jika (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO) nyatakan = benar; HAL_TIM_Base_Stop_IT (& htim1); }}

/ * KOD PENGGUNA TAMAT 4 * /

Selepas 50mS kita memeriksa apakah butang masih dalam keadaan semula atau dilepaskan, jika ya maka kita tahu butang itu dalam keadaan tidak aktif. Kemudian kita beralih arah, buat keadaan benar agar dapat mengesan tekan butang lain dan berhenti pemasa agar dapat memulakannya semula.

Oleh itu, proses ini akan memastikan bahawa kita mengelakkan masalah melantun.

Langkah 5: Kesimpulannya

Ini adalah kod untuk penyingkiran butang. Saya ingin memperhatikan bahawa kod ini dikembangkan oleh saya dan saya bukan pengaturcara yang pakar. Jadi, pasti ada kesilapan. Sekiranya anda mempunyai penyelesaian yang lebih baik, sila perhatikan. Jangan lupa, sekiranya anda menghadapi masalah sila tulis saya dan saya akan berusaha membantu.

Disyorkan: