جدول المحتويات:
- الخطوة 1: متطلبات الأجهزة والبرامج
- الخطوة الثانية: فهم المشكلة
- الخطوة 3: تكوين STM32CubeMX
- الخطوة 4: Keil Software Development
- الخطوة 5: الخاتمة
فيديو: STM32CubeMX زر التنبيه مع المقاطعة: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
مرحبًا ، في هذا البرنامج التعليمي سأحاول تقديم الحل البسيط الخاص بي لمنع ارتداد الأزرار وهي مشكلة خطيرة للغاية. يوجد على الإنترنت العديد من مقاطع الفيديو لتقديم حل لهذه المشكلة ، ولكن لا يوجد منها للمقاطعة الخارجية. في جميع مقاطع الفيديو هذه ، يتم التحقق من الضغط على الزر بطريقة الاستقصاء التي تعتبر غير فعالة. دعنا نبدأ!
الخطوة 1: متطلبات الأجهزة والبرامج
متطلبات الأجهزة:
- مجلس تطوير STM32 ARM
- كمبيوتر
متطلبات البرنامج:
- STM32CubeMX
- كايل uVision5
الخطوة الثانية: فهم المشكلة
لذلك ، نحاول إيجاد حل لمشكلة ارتداد الأزرار. لذلك ، علينا أن نفهم القضية. لذلك ، عندما نضغط على زر ، يجب أن تأتي حالة معاكسة لحالتها السابقة. على سبيل المثال ، إذا كانت عالية فيجب أن تكون منخفضة وإذا كانت منخفضة فيجب أن تكون عالية. ومع ذلك ، فهذه حالة مثالية (في PROTEUS:)) في الواقع ، عندما نضغط على زر ، يبدأ في الارتداد بين HIGH و LOW قبل أن يصل الأمر إلى حالة الخمول. لذا يتظاهر بأنه تم الضغط عليه عدة مرات مما يسبب مشاكل. لذا ، ماذا يجب أن نفعل؟
هنا أريد أن أشير إلى أنه في هذا المثال ، سنستخدم المقاطعة الخارجية للكشف عن الضغط على الزر. لذلك ، بعد اكتشاف الضغط على الزر ، نحتاج إلى الانتظار قليلاً من الوقت ، مثل 50 مللي ثانية للوصول إلى حالة الخمول والتحقق مرة أخرى مما إذا كان الزر في حالة الخمول أم لا. إذا كانت في حالة الخمول ، فيمكننا متابعة مهمتنا. لذا ، دعنا نرى الرمز:)
الخطوة 3: تكوين STM32CubeMX
لذلك ، نحتاج أولاً إلى تمكين المقاطعة الخارجية لزر الضغط (أفترض هنا أنك تستخدم لوحة اكتشاف STM32F407VG):
- في علامة التبويب "Pinout & Configuration" ، انقر فوق pin PA0 المتصل بزر الضغط واختر GPIO_EXTI0 الذي يتيح المقاطعة الخارجية على هذا الدبوس.
- قم بتغيير "تسمية المستخدم" الخاصة بالدبوس إلى "زر_الضغط" أو أي شيء تريده.
بعد ذلك ، نحتاج إلى ضبط المؤقت من أجل إنشاء تأخير زمني قدره 50 مللي ثانية:
- أدخل قسم "Timers"
- انقر فوق TIM1
- اختر "الساعة الداخلية" كمصدر للساعة
-
في التكوين (إذا كنت تريد فهم هذا القسم ، يرجى الرجوع إلى هذا البرنامج التعليمي ، موصى به بشدة "التحكم في محرك سيرفو مع STM32F4 ARM MCU"):
- تعيين prescaler 32000
- وفترة العداد حتى 50
- في علامة التبويب "إعدادات NVIC" ، قم بتمكين كل المقاطعات
تمكين LED كمخرج:
انقر فوق PD12 وقم بتعيينه كـ "GPIO_Output"
ثم قم بتكوين الساعة كما في الصورة أعلاه وقم بإنشاء الرمز.
الخطوة 4: Keil Software Development
أولاً ، نحدد متغير الحالة الذي سيضمن أننا لا نبدأ المؤقت داخل المقاطعة الخارجية عند حدوث الارتداد:
/ * USER CODE BEGIN PFP * / bool state = true ؛ / * نهاية رمز المستخدم PFP * /
ثم نكتب ISR للمقاطعة الخارجية:
باطل HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1) ؛ الدولة = خطأ ؛ } آخر {_NOP () ؛ }}
عند الضغط على الزر ، نتحقق مما إذا كان هذا هو زر الضغط المحدد لدينا وما إذا كانت الحالة صحيحة. في البداية ستكون الحالة صحيحة لإدخال عبارة if. بعد الدخول نبدأ الموقت ونجعل الحالة خاطئة من أجل ضمان أن الارتداد لن يعيد تشغيل المؤقت.
ثم نكتب ISR لمقاطعة المؤقت:
باطل HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * منع تحذير تجميع الوسيطة (الوسائط) غير المستخدمة * / UNUSED (htim) ؛
/ * ملاحظة: لا ينبغي تعديل هذه الوظيفة ، عند الحاجة إلى رد الاتصال ،
يمكن تنفيذ HAL_TIM_PeriodElapsedCallback في ملف المستخدم * / إذا كان (HAL_GPIO_ReadPin (Push_Button_GPIO_Port، Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD، GPIO_PIN_12)؛ الدولة = صحيح ؛ HAL_TIM_Base_Stop_IT (& htim1) ؛ }}
/ * نهاية رمز المستخدم 4 * /
بعد 50 مللي ثانية نتحقق مما إذا كان الزر في حالة إعادة تعيين أو تم تحريره ، إذا كانت الإجابة بنعم ، فنحن نعلم أن هذا الزر في حالة الخمول. ثم نقوم بتبديل الصمام ، وجعل الحالة صحيحة حتى نتمكن من اكتشاف زر آخر ، اضغط على زر إيقاف المؤقت حتى نتمكن من بدء تشغيله مرة أخرى.
لذلك ، ستضمن هذه العملية أننا نمنع المشكلة المرتدة.
الخطوة 5: الخاتمة
كان هذا رمزًا لارتداد الزر. أريد أن أشير إلى أن هذا الكود قد تم تطويره من قبلي ولست مبرمجًا خبيرًا. لذلك ، يمكن أن تكون هناك أخطاء بالتأكيد. إذا كان لديك حل أفضل يرجى ملاحظة ذلك. لا تنس ، إذا واجهت أي مشكلة ، يرجى الكتابة إلي وسأحاول مساعدتك.
موصى به:
نظام التنبيه المسبق للشرائح: 6 خطوات
نظام التنبيه المسبق للشرائح: في Brown Dog Gadgets ، نقوم بالكثير من دفق الفيديو لورش العمل ، ويتضمن إعدادنا شخصًا واحدًا على الكاميرا وشخصًا آخر كمنتج يقوم بتشغيل البرنامج ، ويراقب نافذة الدردشة ، ويقوم بتبديل الكاميرا والتقدم الشرائح
إنذار الحريق مع التنبيه عبر الرسائل القصيرة: 3 خطوات
إنذار الحريق بإخطار الرسائل القصيرة: GSM 800H ، مستشعر الحريق القائم على Arduino ونظام الإخطار بالرسائل القصيرة ، يستخدم مستشعر الأشعة تحت الحمراء للكشف عن الحريق في الغرفة المظلمة. يقوم بإرسال الرسائل القصيرة عبر مودم GSM 800H المتصل بـ Serial Rx و Tx Pins من Arduino قم بتعيين رقم هاتفك المحمول داخل الكود
قفل دراجة التنبيه DIY (تنشيط الصدمة): 5 خطوات (بالصور)
قفل الدراجة الإنذار DIY (تنشيط الصدمة): في هذا المشروع ، سأوضح لك كيفية إنشاء قفل دراجة إنذار يعمل بالصدمات. كما يوحي الاسم ، فإنه يصدر صوت تنبيه عندما يتم تحريك دراجتك بإذن. على طول الطريق سوف نتعلم قليلا عن البيزو
تصميم وحدة تحكم المقاطعة القابلة للبرمجة في VHDL: 4 خطوات
تصميم وحدة تحكم المقاطعة القابلة للبرمجة في VHDL: لقد غمرني نوع الردود التي أحصل عليها في هذه المدونة. شكرًا يا رفاق على زيارة مدونتي وتحفيزهم على مشاركة معرفتي معكم. هذه المرة ، سأقدم تصميم وحدة أخرى مثيرة للاهتمام نراها في جميع SOCs - Interrupt C
اردوينو - المقاطعة الدورية: 4 خطوات
Arduino - المقاطعة الدورية: يدور هذا Instructable حول استخدام مقاطعة دورية للتوقيت في برامج Arduino. هذه خطوة لمبرمج Arduino ناشئ يعرف أن Arduino يمكنه فعل المزيد ، لكنه لا يعرف تمامًا كيفية تحقيق ذلك. إذا كان هناك عرض أداء