Mundarija:
- 1 -qadam: Uskuna va dasturiy ta'minot talablari
- 2 -qadam: Muammoni tushunish
- 3 -qadam: STM32CubeMX konfiguratsiyasi
- 4 -qadam: Keil dasturiy ta'minotini ishlab chiqish
- 5 -qadam: Xulosa
Video: STM32CubeMX tugmasi uzilish bilan o'chiriladi: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
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
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
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:
IRFZ44N MOSFET bilan simli uzilish signallari davri: 11 qadam
IRFZ44N MOSFET bilan simli uzilish signallari davri: Bugun biz ushbu maqolada IRFZ44N MOSFET bilan simli uzilish signalining afzalliklarini muhokama qilish uchun to'rtburchaklar o'lchashga intilamiz. IRFZ44N-bu NOS-kanalli shirinliklarni davolash bo'yicha assotsiatsiya, MOSFET-bu yuqori mahsuldorlikni ta'minlaydi
DIY SnapIno (Arduino uzilish sxemalari bilan uchrashadi) + chizish: 3 qadam
DIY SnapIno (Arduino Snap Circuits bilan uchrashadi) + Scratch: Men 4 yil oldin o'g'limga Snap Circuits sotib olganman, men Arduino bilan o'ynaganimda. Endi biz Arduino va Arduino uchun Scratch bilan ishlashni boshlaymiz, lekin men SnapIno -ni ajoyib g'oya deb topdim … uning tug'ilgan kuni yoki Rojdestvoga yaqin bo'lgani uchun men qaror qilaman
12v batareya uchun DIY batareyasi ko'rsatkichi/avtomatik uzilish: 5 qadam (rasmlar bilan)
12v batareya uchun DIY batareya darajasi indikatori/avtomatik uzilish: DIYers … Biz hammamiz shunday vaziyatni boshdan kechirdikki, bizning yuqori zaryadlovchilarimiz lityum polimer batareyalarni zaryad qilish bilan band, lekin siz hali ham 12v qo'rg'oshin kislotali batareyani zaryadlashingiz kerak. bor - ko'r odam …. Ha, ko'r odam
Vaqt bomba o'yini qanday o'chiriladi: 6 qadam
Vaqt bomba o'yinini qanday o'chirish mumkin: Bu fikr menga g'oyib bo'ldi. Men haqiqatan ham shunga o'xshash narsani topa olmadim. Asl g'oya ko'proq ishtirok etdi, shuning uchun bu o'yinning soddalashtirilgan versiyasi. Bu "vaqt bombasi". Siz uni soatdan oldin o'chirishingiz kerak
Kompyuteringiz uchun Smart Master/Slave Power Strip [mod] (o'z -o'zidan o'chiriladi, lekin nol kutish holatida): 6 qadam (rasmlar bilan)
Kompyuteringiz uchun Smart Master/Slave Power Strip [mod] (o'z -o'zidan o'chiriladi, lekin nol kutish holatida): O'chirilgan bo'lishi kerak. Qisqacha aytganda: biz kerakli mahsulotni topa olmadik, shuning uchun biz modifikatsiyani yakunladik. Biz " Energiyani tejovchi " Zweibrueder elektr tarmoqlari. Qurilmalar juda qattiq va unchalik emas