विषयसूची:

STM32CubeMX बटन रुकावट के साथ शुरू होता है: 5 कदम
STM32CubeMX बटन रुकावट के साथ शुरू होता है: 5 कदम

वीडियो: STM32CubeMX बटन रुकावट के साथ शुरू होता है: 5 कदम

वीडियो: STM32CubeMX बटन रुकावट के साथ शुरू होता है: 5 कदम
वीडियो: #5 STM32CubeMX Power Consumption Calculator 2024, नवंबर
Anonim
STM32CubeMX बटन इंटरप्ट के साथ शुरू होता है
STM32CubeMX बटन इंटरप्ट के साथ शुरू होता है

नमस्ते, इस ट्यूटोरियल में मैं बटन बाउंस को रोकने के लिए अपना सरल समाधान देने की कोशिश करूंगा जो कि बहुत गंभीर मुद्दा है। इंटरनेट पर इस मुद्दे के समाधान की पेशकश करने के लिए कई वीडियो हैं, लेकिन उनमें से बाहरी रुकावट के लिए नहीं हैं। इन सभी वीडियो में मतदान विधि द्वारा बटन प्रेस की जांच की जाती है जो अक्षम है। चलिए, शुरू करते हैं!

चरण 1: हार्डवेयर और सॉफ्टवेयर आवश्यकताएँ

हार्डवेयर आवश्यकताएँ:

  • STM32 एआरएम विकास बोर्ड
  • एक कंप्यूटर

सॉफ़्टवेयर आवश्यकताएं:

  • STM32CubeMX
  • कील यूविज़न5

चरण 2: समस्या को समझना

समस्या को समझना
समस्या को समझना

इसलिए, हम बटन बाउंसिंग समस्या का समाधान खोजने का प्रयास करते हैं। इसलिए हमें इस मुद्दे को समझना होगा। इसलिए, जब हम एक बटन दबाते हैं तो यह एक ऐसी स्थिति में आना चाहिए जो अपनी पिछली स्थिति के विपरीत हो। उदाहरण के लिए, यदि यह उच्च था तो इसे निम्न होना चाहिए और यदि यह निम्न था तो इसे उच्च होना चाहिए। हालांकि, यह आदर्श स्थिति है (प्रोटियस में:)) वास्तव में, जब हम एक बटन दबाते हैं तो यह निष्क्रिय अवस्था में आने से पहले उच्च और निम्न के बीच उछालना शुरू कर देता है। तो, दिखावा करता है कि इसे कई बार दबाया गया है जिससे समस्याएं होती हैं। तो, हमें क्या करना चाहिए?

यहां मैं यह नोट करना चाहता हूं कि इस उदाहरण में, हम बटन प्रेस का पता लगाने के लिए बाहरी इंटरप्ट का उपयोग करेंगे। इसलिए, जब हम बटन प्रेस का पता लगाते हैं, तो हमें कुछ समय प्रतीक्षा करने की आवश्यकता होती है, जैसे कि 50mS निष्क्रिय अवस्था तक पहुँचने के लिए और फिर से जाँच करें कि बटन निष्क्रिय अवस्था में है या नहीं। यदि यह निष्क्रिय अवस्था में है तो हम अपने कार्य को जारी रख सकते हैं। तो, आइए कोड देखें:)

चरण 3: STM32CubeMX कॉन्फ़िगरेशन

STM32CubeMX कॉन्फ़िगरेशन
STM32CubeMX कॉन्फ़िगरेशन

इसलिए, हमें पहले अपने पुश बटन के लिए बाहरी व्यवधान को सक्षम करने की आवश्यकता है (मैं यहां मानता हूं कि आप STM32F407VG डिस्कवरी बोर्ड का उपयोग करते हैं):

  • "पिनआउट और कॉन्फ़िगरेशन" टैब में पिन PA0 पर क्लिक करें जो पुश बटन से जुड़ा है और GPIO_EXTI0 चुनें जो उस पिन पर बाहरी रुकावट को सक्षम करता है।
  • पिन के "उपयोगकर्ता लेबल" को "पुश_बटन" या अपनी इच्छित किसी भी चीज़ में बदलें।

फिर, हमें 50mS समय विलंब बनाने के लिए टाइमर को कॉन्फ़िगर करने की आवश्यकता है:

  • "टाइमर" अनुभाग दर्ज करें
  • TIM1. पर क्लिक करें
  • घड़ी स्रोत के रूप में "आंतरिक घड़ी" चुनें
  • कॉन्फ़िगरेशन में (यदि आप इस खंड को समझना चाहते हैं तो कृपया इस ट्यूटोरियल को देखें, अत्यधिक अनुशंसित "STM32F4 ARM MCU के साथ सर्वो मोटर कंट्रोल"):

    • प्रीस्कूलर को 32000. के रूप में सेट करें
    • और काउंटर अवधि 50. तक
  • "NVIC सेटिंग्स" टैब में सभी व्यवधानों को सक्षम करें

आउटपुट के रूप में एलईडी सक्षम करें:

PD12 पर क्लिक करें और "GPIO_Output" के रूप में सेट करें

फिर, ऊपर दी गई छवि के अनुसार घड़ी को कॉन्फ़िगर करें और कोड जनरेट करें।

चरण 4: कील सॉफ्टवेयर विकास

सबसे पहले, हम स्टेट वेरिएबल को परिभाषित करते हैं जो यह सुनिश्चित करेगा कि बाउंस होने पर हम बाहरी इंटरप्ट के अंदर टाइमर शुरू न करें:

/* यूजर कोड BEGIN PFP */बूल स्टेट = ट्रू; /* यूजर कोड एंड पीएफपी */

फिर, हम बाहरी व्यवधान के लिए ISR लिखते हैं:

शून्य HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {अगर (GPIO_Pin == Push_Button_Pin && State == true) {HAL_TIM_Base_Start_IT(&htim1); राज्य = झूठा; } और { _NOP (); } }

जब बटन दबाया जाता है तो हम जांचते हैं कि क्या यह हमारा परिभाषित पुश बटन था और क्या राज्य सत्य है। शुरुआत में अगर कथन दर्ज करने के लिए राज्य सत्य होगा। दर्ज करने के बाद हम टाइमर शुरू करते हैं और यह सुनिश्चित करने के लिए राज्य को झूठा बनाते हैं कि बाउंसिंग टाइमर को पुनरारंभ नहीं करेगा।

फिर, हम टाइमर इंटरप्ट के लिए ISR लिखते हैं:

शून्य HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){/* अप्रयुक्त तर्कों को रोकें संकलन चेतावनी */ UNUSED(htim);

/* नोट: कॉलबैक की आवश्यकता होने पर इस फ़ंक्शन को संशोधित नहीं किया जाना चाहिए, उपयोगकर्ता फ़ाइल में HAL_TIM_PeriodElapsedCallback लागू किया जा सकता है */ if(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 */

50mS के बाद हम जाँचते हैं कि बटन अभी तक रीसेट स्थिति में है या जारी किया गया है, यदि हाँ तो हम जानते हैं कि बटन निष्क्रिय अवस्था में है। फिर हम एलईडी को टॉगल करते हैं, एक और बटन प्रेस का पता लगाने में सक्षम होने के लिए राज्य को सही बनाते हैं और इसे फिर से शुरू करने में सक्षम होने के लिए टाइमर को रोकते हैं।

इसलिए, यह प्रक्रिया सुनिश्चित करेगी कि हम बाउंसिंग इश्यू को रोकें।

चरण 5: निष्कर्ष

यह बटन डेब्यू के लिए कोड था। मैं यह नोट करना चाहता हूं कि यह कोड मेरे द्वारा विकसित किया गया था और मैं एक विशेषज्ञ प्रोग्रामर नहीं हूं। तो, निश्चित रूप से त्रुटियां हो सकती हैं। यदि आपके पास बेहतर समाधान है तो कृपया इसे नोट करें। मत भूलो, अगर आपको कोई समस्या आती है तो कृपया मुझे लिखें और मैं मदद करने की कोशिश करूंगा।

सिफारिश की: