Mundarija:

STM32CubeMX tugmasi uzilish bilan o'chiriladi: 5 qadam
STM32CubeMX tugmasi uzilish bilan o'chiriladi: 5 qadam

Video: STM32CubeMX tugmasi uzilish bilan o'chiriladi: 5 qadam

Video: STM32CubeMX tugmasi uzilish bilan o'chiriladi: 5 qadam
Video: PROTEUS dasturini STM32 controllerini sinulyatsiya qilishga tayyorlash 2024, Noyabr
Anonim
STM32CubeMX tugmasi uzilish bilan o'chiriladi
STM32CubeMX tugmasi uzilish bilan o'chiriladi

Salom, bu darslikda men tugmachalarning sakrashining oldini olish uchun o'zimning oddiy yechimimni berishga harakat qilaman, bu juda jiddiy masala. Internetda bu muammoning echimini taklif qiladigan ko'plab videolar bor, lekin ularning hech biri tashqi uzilishlar uchun emas. Bu videolarning barchasida tugma bosilishi so'rov usuli bilan tekshiriladi, bu samarasiz. Xo'sh, boshlaylik!

1 -qadam: Uskuna va dasturiy ta'minot talablari

Uskuna talablari:

  • STM32 ARM ishlab chiqish paneli
  • Kompyuter

Dasturiy ta'minot talablari:

  • STM32CubeMX
  • Keil uVision 5

2 -qadam: Muammoni tushunish

Muammoni tushunish
Muammoni tushunish

Shunday qilib, biz tugmachalarni qaytarish muammosini hal qilishga harakat qilamiz. Shuning uchun biz masalani tushunishimiz kerak. Shunday qilib, biz tugmani bosganimizda, uning oldingi holatiga qarama -qarshi bo'lgan holat paydo bo'lishi kerak. Masalan, agar u YUQORI bo'lsa, LOW bo'lishi kerak, LOW esa - YUQORI bo'lishi kerak. Biroq, bu ideal holat (PROTEUSda:)) Aslida, biz tugmani bosganimizda, u bo'sh holatga kelmasdan oldin, YUQORI va LOW o'rtasida siljiy boshlaydi. Shunday qilib, u bir necha marta bosilgandek bo'lib, bu muammolarni keltirib chiqaradi. Xo'sh, biz nima qilishimiz kerak?

Shuni ta'kidlashni istardimki, bu misolda biz tugmani bosilishini aniqlash uchun tashqi uzilishdan foydalanamiz. Shunday qilib, biz tugmachani bosganimizni aniqlagandan so'ng, biz bo'sh holatga o'tish uchun 50 mS kabi bir oz kutishimiz kerak va tugma ishlamayotganligini tekshiramiz. Agar u bo'sh holatda bo'lsa, biz o'z vazifamizni davom ettira olamiz. Shunday qilib, kodni ko'rib chiqaylik:)

3 -qadam: STM32CubeMX konfiguratsiyasi

STM32CubeMX konfiguratsiyasi
STM32CubeMX konfiguratsiyasi

Shunday qilib, biz avval tugmachamiz uchun tashqi uzilishni yoqishimiz kerak (bu erda siz STM32F407VG kashfiyot kartasidan foydalanasiz deb o'ylayman):

  • "Pinout va konfiguratsiya" yorlig'ida tugmachaga ulangan PA0 pinini bosing va bu pinning tashqi uzilishini ta'minlaydigan GPIO_EXTI0 -ni tanlang.
  • Pinning "foydalanuvchi yorlig'i" ni "Push_Button" yoki xohlagan narsaga o'zgartiring.

Keyin, biz 50mS vaqt kechikishini yaratish uchun taymerni sozlashimiz kerak:

  • "Taymerlar" bo'limiga kiring
  • TIM1 -ni bosing
  • Soat manbai sifatida "Ichki soat" ni tanlang
  • Konfiguratsiyada (agar siz ushbu bo'limni tushunmoqchi bo'lsangiz, iltimos, "STM32F4 ARM MCU bilan Servo Dvigatelini Boshqarish" qo'llanmasiga qarang):

    • Oldindan hisoblagichni 32000 qilib o'rnating
    • Va hisoblagich davri 50 ga
  • "NVIC sozlamalari" yorlig'ida barcha uzilishlarni yoqing

Chiqish sifatida LEDni yoqing:

PD12 -ni bosing va "GPIO_Output" sifatida o'rnating

Keyin soatni yuqoridagi rasmda bo'lgani kabi sozlang va kodni yarating.

4 -qadam: Keil dasturiy ta'minotini ishlab chiqish

Birinchidan, biz holat o'zgaruvchisini belgilaymiz, bu vaqt o'tishi bilan tashqi uzilish ichida taymerni ishga tushirmasligimizni ta'minlaydi:

/ * USER CODE BEGIN PFP */bool state = true; / * FOYDALANISH KODI PFP tugaydi */

Keyin biz tashqi uzilish uchun ISR yozamiz:

bekor HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); holat = noto'g'ri; } boshqa {_NOP (); }}

Tugma bosilganda, biz aniqlagan tugma ekanligini va holat to'g'ri ekanligini tekshiramiz. If iborasini kiritish uchun boshida holat to'g'ri bo'ladi. Kirganimizdan so'ng, taymerni ishga tushiramiz va taymerni qaytadan ishga tushirmasligiga ishonch hosil qilish uchun yolg'on holatga keltiramiz.

Keyin, biz taymer uzilishi uchun ISR yozamiz:

void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Ishlatilmaydigan argument (lar) ni kompilyatsiya qilish haqida ogohlantirishning oldini olish * / QO'LSIZ (htim);

/* DIQQAT: qayta qo'ng'iroq qilish zarur bo'lganda, bu funktsiyani o'zgartirmaslik kerak.

HAL_TIM_PeriodElapsedCallback */ if foydalanuvchi faylida amalga oshirilishi mumkin holat = rost; HAL_TIM_Base_Stop_IT (& htim1); }}

/ * FOYDALANISH KODI 4 tugaydi */

50 mSdan keyin biz tugma hali asl holatiga qaytarilganmi yoki qo'yib yuborilganligini tekshiramiz, agar shunday bo'lsa, biz bu tugma bo'sh holatda ekanligini bilamiz. Keyin biz boshqa tugmachani bosish va taymerni qayta ishga tushirish uchun to'xtashni aniqlay olamiz.

Shunday qilib, bu jarayon muammoning oldini olishni ta'minlaydi.

5 -qadam: Xulosa

Bu tugmani o'chirish kodi edi. Shuni ta'kidlashni istardimki, bu kod men tomonidan ishlab chiqilgan va men tajribali dasturchi emasman. Shunday qilib, xatolar bo'lishi mumkin. Agar sizda yaxshiroq yechim bo'lsa, iltimos, e'tibor bering. Shuni unutmangki, agar biror muammoga duch kelsangiz, menga yozing va men yordam berishga harakat qilaman.

Tavsiya: