मुझे यह जवाब STM32 अंडरस्टैंडिंग GPIO सेटिंग से मिला
- GPIO_PuPd (पुल-अप / पुल-डाउन)
डिजिटल सर्किट में, यह महत्वपूर्ण है कि सिग्नल लाइनों को कभी भी "फ्लोट" करने की अनुमति नहीं है। यही है, उन्हें हमेशा उच्च अवस्था या निम्न अवस्था में रहने की आवश्यकता होती है। तैरते समय, राज्य अनिर्धारित होता है, और कुछ अलग प्रकार की समस्याओं का कारण बनता है।
इसे ठीक करने का तरीका सिग्नल लाइन से एक अवरोधक को Vcc या Gnd में जोड़ना है। इस तरह, यदि रेखा सक्रिय रूप से उच्च या निम्न संचालित नहीं हो रही है, तो अवरोधक एक ज्ञात स्तर तक बहाव की क्षमता का कारण होगा।
एआरएम (और अन्य माइक्रोकंट्रोलर्स) ने ऐसा करने के लिए बिल्ट-इन सर्किटरी बनाई है। इस तरह, आपको अपने सर्किट में एक और हिस्सा जोड़ने की आवश्यकता नहीं है। यदि आप "GPIO_PuPd_UP" चुनते हैं, उदाहरण के लिए, यह सिग्नल लाइन और Vcc के बीच एक रोकनेवाला जोड़ने के लिए समान है।
- GPIO_OType (आउटपुट प्रकार):
पुश-पुल: यह आउटपुट प्रकार है जो ज्यादातर लोग "मानक" के रूप में सोचते हैं। जब आउटपुट कम हो जाता है, तो यह जमीन पर सक्रिय रूप से "खींच" जाता है। इसके विपरीत, जब आउटपुट उच्च पर सेट होता है, तो यह Vcc की ओर सक्रिय रूप से "पुश" होता है। सरलीकृत, यह इस तरह दिखता है:
दूसरी ओर एक ओपन-ड्रेन आउटपुट, केवल एक दिशा में सक्रिय है। यह पिन को जमीन की ओर खींच सकता है, लेकिन यह इसे उच्च ड्राइव नहीं कर सकता है। पिछली छवि की कल्पना करें, लेकिन ऊपरी MOSFET के बिना। जब यह जमीन पर नहीं खींच रहा है, तो (निचला पक्ष) MOSFET केवल गैर-प्रवाहकीय है, जो आउटपुट को फ्लोट करने का कारण बनता है।
इस प्रकार के आउटपुट के लिए, सर्किट में एक पुल-अप रोकनेवाला जोड़ा जाना चाहिए, जो कम चालित होने पर लाइन उच्च हो जाएगा। आप बाहरी भाग के साथ या GPIO_PuPd मान GPIO_PuPd_UP पर सेट करके ऐसा कर सकते हैं।
नाम इस तथ्य से आता है कि MOSFET का नाला आंतरिक रूप से किसी भी चीज से जुड़ा नहीं है। MOSFET के बजाय BJT का उपयोग करने पर इस प्रकार के आउटपुट को "ओपन-कलेक्टर" भी कहा जाता है।
मूल रूप से, यह आउटपुट सिग्नल के स्लीव रेट (वृद्धि समय और गिरावट का समय) को नियंत्रित करता है। जितनी तेजी से स्लीव रेट होता है, उतना ही शोर सर्किट से होता है। यह बहुत अच्छा अभ्यास है कि स्लीव रेट को धीमा रखें, और केवल एक विशिष्ट कारण होने पर इसे बढ़ाएं।