STM32 GPIO सेटिंग को समझना


41

STM32 स्टैंडर्ड पेरिफेरल लाइब्रेरी में, हमें GPIO को कॉन्फ़िगर करना होगा।

लेकिन 3 कार्य हैं जो मुझे यकीन नहीं है कि उन्हें कैसे कॉन्फ़िगर किया जाए;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

में GPIO_Speed , वहाँ से लेने के लिए 4 सेटिंग्स हैं

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

मुझे कैसे पता चलेगा कि मैं किस गति से चुनूं? क्या उच्च गति या कम गति का उपयोग करने से कोई फायदा या नुकसान है? (जैसे: बिजली की खपत?)

में GPIO_OType , वहाँ से लेने के लिए 2 सेटिंग नहीं है

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

कैसे पता करें कि किसे चुनना है? और खुली नाली और धक्का क्या है?

में GPIO_PuPd , वहाँ से लेने के लिए 3 सेटिंग नहीं है

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

मुझे लगता है कि यह सेटिंग पुश पुल की शुरुआती सेटिंग से संबंधित है।


संबंधित: कैसे स्पष्ट रूप से "ओपन ड्रेन" मोड को माइक्रोकंट्रोलर्स पर बल देने के लिए जो मूल रूप से इसका समर्थन नहीं करता है, जैसे कि AVR / Arduino, PIC, आदि: Electronics.stackexchange.com/a/354993/26234
गेब्रियल स्टेपल्स

जवाबों:


45
  • GPIO_PuPd (पुल-अप / पुल-डाउन)

    डिजिटल सर्किट में, यह महत्वपूर्ण है कि सिग्नल लाइनों को कभी भी "फ्लोट" करने की अनुमति नहीं है। यही है, उन्हें हमेशा उच्च अवस्था या निम्न अवस्था में रहने की आवश्यकता होती है। तैरते समय, राज्य अनिर्धारित होता है, और कुछ अलग प्रकार की समस्याओं का कारण बनता है।

    इसे ठीक करने का तरीका सिग्नल लाइन से एक अवरोधक को Vcc या Gnd में जोड़ना है। इस तरह, यदि रेखा सक्रिय रूप से उच्च या निम्न संचालित नहीं हो रही है, तो अवरोधक एक ज्ञात स्तर तक बहाव की क्षमता का कारण होगा।

    एआरएम (और अन्य माइक्रोकंट्रोलर्स) ने ऐसा करने के लिए बिल्ट-इन सर्किटरी बनाई है। इस तरह, आपको अपने सर्किट में एक और हिस्सा जोड़ने की आवश्यकता नहीं है। यदि आप "GPIO_PuPd_UP" चुनते हैं, उदाहरण के लिए, यह सिग्नल लाइन और Vcc के बीच एक रोकनेवाला जोड़ने के लिए समान है।

  • GPIO_OType (आउटपुट प्रकार):

    पुश-पुल: यह आउटपुट प्रकार है जो ज्यादातर लोग "मानक" के रूप में सोचते हैं। जब आउटपुट कम हो जाता है, तो यह जमीन पर सक्रिय रूप से "खींच" जाता है। इसके विपरीत, जब आउटपुट उच्च पर सेट होता है, तो यह Vcc की ओर सक्रिय रूप से "पुश" होता है। सरलीकृत, यह इस तरह दिखता है:

    पुश पुल

    दूसरी ओर एक ओपन-ड्रेन आउटपुट, केवल एक दिशा में सक्रिय है। यह पिन को जमीन की ओर खींच सकता है, लेकिन यह इसे उच्च ड्राइव नहीं कर सकता है। पिछली छवि की कल्पना करें, लेकिन ऊपरी MOSFET के बिना। जब यह जमीन पर नहीं खींच रहा है, तो MOSFET केवल गैर-प्रवाहकीय है, जो आउटपुट को फ्लोट करने का कारण बनता है:

    खुली नाली

    इस प्रकार के आउटपुट के लिए, सर्किट में एक पुल-अप रोकनेवाला जोड़ा जाना चाहिए, जो कम चालित होने पर लाइन उच्च हो जाएगा। आप बाहरी भाग के साथ या GPIO_PuPd मान GPIO_PuPd_UP पर सेट करके ऐसा कर सकते हैं।

    नाम इस तथ्य से आता है कि MOSFET का नाला आंतरिक रूप से किसी भी चीज से जुड़ा नहीं है। MOSFET के बजाय BJT का उपयोग करने पर इस प्रकार के आउटपुट को "ओपन-कलेक्टर" भी कहा जाता है।

  • GPIO_Speed

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


धन्यवाद! महान उत्तर के लिए;), क्या आप अलग-अलग समस्याओं पर थोड़ा और समझाते हैं जब यह फ्लोटिंग स्थिति में होता है?
टिम

3
यह विचार है कि एक मध्यवर्ती इनपुट वोल्टेज पर किसी भी लम्बाई के लिए आवास आंशिक रूप से एक इनपुट ब्लॉक में ऊपरी और निचले दोनों FETs को चालू कर सकता है और उनके माध्यम से बिजली की आपूर्ति को आंशिक रूप से कम कर सकता है, जिसके परिणामस्वरूप अत्यधिक बिजली की खपत होती है या (विशेष रूप से गंभीर मामलों में) ) संभावित नुकसान।
क्रिस स्ट्रैटन

@ टिम हां, क्रिस स्ट्रैटन ने क्या कहा :)
बिट्समैक

3
@ समय भी, जब लाइनें चल रही हैं, तो वोल्टेज के स्तर को कम करना बहुत आसान है। सर्किट के चारों ओर अपना हाथ लहराते हुए, कैपेसिटिव इंटरैक्शन के कारण इनपुट की स्थिति को बदल सकते हैं ...
बिट्समैक

1
@ यह वास्तव में आवेदन पर निर्भर करता है। यदि आप एक स्विच (या बटन) पढ़ रहे हैं, तो यह वास्तव में मायने नहीं रखता है। यदि आप अन्य घटकों में हस्तक्षेप कर रहे हैं, तो यह इंटरफ़ेस पर निर्भर करता है। उदाहरण के लिए, SPI संचार के लिए, CS लाइन सक्रिय-निम्न है। उस स्थिति में, आप एक पुल-अप अवरोधक चाहते हैं, इसलिए CS कभी भी अनजाने में कम नहीं होता है। आप सोच सकते हैं कि यह अनावश्यक है अगर आप हमेशा माइक्रोकंट्रोलर के साथ सक्रिय रूप से लाइन चलाएंगे। लेकिन माइक्रोकंट्रोलर के शुरू होने से पहले क्या होता है? या अगर यह रीसेट करता है? पुल-अप रोकनेवाला किसी भी अस्पष्टता को हटा देता है ...
बिटस्मैक

5

GPIO स्पीड अधिकतम आवृत्ति है जो GPIO उत्पादन कर सकती है। कम सेटिंग से बिजली बचाई जा सकती है।

आउटपुट प्रकार यह है कि क्या पिन उच्च और चढ़ाव (पुश पुल) का दावा करता है, या क्या आउटपुट एफईटी के गेट पर मुड़ता है जो नाली (ओपन ड्रेन) पर पिन से जुड़ा होता है। यह सुविधाजनक हो सकता है यदि आपको किसी पिन को संलग्न करने की आवश्यकता है ताकि अन्य पिनों में शॉर्ट के बिना बस को खींचने में सक्षम हो।

प्रतिरोधों को खींचो, पिन आउटपुट को बिजली रेल में संलग्न करें, और नीचे खींचकर इसे एक अवरोधक के माध्यम से जमीन में संलग्न करें। यह wi voltagel, अन्य चीजों के अलावा, पिन के वोल्टेज को नियंत्रित करता है, भले ही बिट उच्च प्रतिबाधा स्थिति में हो। डिजिटल इनपुट मूल्य को बदलने के लिए स्पॉट स्विच का उपयोग करके सामान करना महत्वपूर्ण है। स्विच के खुले होने पर भी, इनपुट अनुमानित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.