STM32 पर क्या होता है जब दो पिन समान वैकल्पिक फ़ंक्शन के लिए कॉन्फ़िगर किए जाते हैं?


10

STM32F051 मैनुअल के माध्यम से पढ़ना, ऐसा लगता है कि दो पिंस पर एक ही वैकल्पिक फ़ंक्शन को कॉन्फ़िगर करना संभव है; उदाहरण के लिए, आपके पास एक ही समय में कई USART1_TX पिन हो सकते हैं। या उदाहरण के लिए दो USART_RX पिन के अधिक समस्याग्रस्त मामले। इस मामले पर मैनुअल चुप है। क्या यह कानूनी / सुरक्षित है? क्या यह उपयोगी है?


2
दिलचस्प सवाल। मैं देख सकता हूं कि कभी-कभी यह उपयोगी क्यों होगा, उदाहरण के लिए, डीबगिंग को दूसरे पिन पर लाने के लिए या कुछ स्थानों पर बफ़र्ड घड़ियों को प्राप्त करने के लिए डिबगिंग करते समय। यह प्रासंगिक मैनुअल लिंक में जोड़ने लायक हो सकता है, हालांकि किसी को भी इसे खोजने के लिए सहेजना होगा।
पीटरजे

फिर से - दिलचस्प सवाल। लेकिन दो अलग-अलग पिनों से USART_RX को असाइन करने के मामले के बारे में कैसे? एक को उम्मीद होगी कि चिप डिजाइनरों ने दो स्रोतों से आंतरिक विवाद की अनुमति देने के लिए एक दूसरे के लिए प्राथमिकता योजना की योजना बनाई थी।
माइकल करास

मैंने कभी यह कोशिश नहीं की है, लेकिन मैं पिन आरेखों से जो याद करता हूं, उसके आधार पर, आप मूल रूप से आंतरिक रूप से पिंस को एक साथ जोड़ना समाप्त करेंगे।
rjp

जवाबों:


5

प्रोसेसर पर जो I / O फ़ंक्शन का चयन करने के लिए प्रति-पिन रजिस्टरों का उपयोग करते हैं, यह आम तौर पर बिना संघर्ष के कई पिनों के लिए आउटपुट फ़ंक्शन को रूट करना संभव है; सभी पिन एक ही आउटपुट को प्रतिध्वनित करेंगे। एक इनपुट से जुड़े कई पिन होने का प्रभाव अक्सर अनिर्दिष्ट होता है; अगर उदाहरण के लिए एक UART में I / O पिन 3 और 4 UART से जुड़ा होता है, तो यह व्यवहार कर सकता है जैसे UART एक "और" गेट से जुड़ा था, जो इनपुट के रूप में पिन 3 और 4 लेता था, या यह व्यवहार कर सकता है जैसे कि यह जुड़ा था एक पिन करने के लिए और दूसरे को अनदेखा करें, या यह दोनों पिन को UART के इनपुट बफर में ट्रांजिस्टर के माध्यम से जोड़ सकता है, जिसमें मध्यम मात्रा में प्रतिरोध था, या जब पिन 3 अधिक हो और 4 कम या इसके विपरीत हो, या यह हो सकता है बस कल्पना के बारे में कुछ और कर सकते हैं। मैं डॉन'

कुछ माइक्रोचिप भागों (शायद कुछ एसटीएम भागों के रूप में अच्छी तरह से) में उपयोग किए जाने वाले कुछ अच्छे डिजाइन दृष्टिकोण में प्रत्येक I / O फ़ंक्शन का चयन करने के लिए एक मल्टीप्लेक्सर शामिल होता है जिसमें से पिन को इनपुट स्वीकार करना चाहिए, और I को इंगित करने के लिए पिन में एक मल्टीप्लेक्स शामिल होता है / ओ फ़ंक्शन जिससे यह डेटा आउटपुट करना चाहिए। इस तरह के डिजाइन से एक पिन फीड कई I / O फ़ंक्शन करना संभव हो जाता है, साथ ही साथ परस्पर विरोधी कॉन्फ़िगरेशन द्वारा उत्पन्न किसी भी अस्पष्टता को समाप्त कर देता है।


3

हाँ, यह उपयोगी है। STM32F407VGT6 पर प्रयोग से परिणाम: दोनों AF पिनों को AF के रूप में एक साथ इस्तेमाल किया जा सकता है, कम से कम अगर इन AF को इनपुट्स के रूप में इस्तेमाल किया जाए। प्रयोग बाहरी ट्रिगर के बढ़ते किनारे पर TIM1 को ट्रिगर करना था - सिग्नल "TIM1_ETR"। "TIM1_ETR" संकेत को MCU पैकेज के PE7 और / या PA12 में मैप किया जा सकता है।

प्रयोग: दोनों P7 PE और PA12 को AF को TIM1 के लिए AF "TIM1_ETR" के रूप में प्रारंभ करें:

{
    GPIO_InitTypeDef GPIO_InitStruct = { 0 };
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pin = GPIO_PIN_7;
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); // configure PE7 as AF

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // configure PA12 as AF
}

परिणाम - TIM1 को किसी भी पीई PE7 या PA12 पर बढ़त से शुरू किया जाता है।

यह रन-टाइम में MUX (परिवर्तन) AF पिन के तरीके का खुलासा करता है:

main
{
  GPIO_InitTypeDef GPIO_InitStruct = { 0 };

// Deactivate PA12 input (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// select PE7 as a trigger source,
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();

/* Now timer will be started by rising edge only on PE7 */

// ... later one can select PA12 as trigger source. Deactivate PE7 (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Activate PA12
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();
/* timer will be started by rising edge only on PA12 */
}

यह सहायक हो सकता है फिर टाइमर ट्रिगर के लिए दो अलग-अलग स्रोतों की आवश्यकता होती है, इससे हमें MUX IC :) को बचाया जा सकता है। यदि पोस्ट की शुरुआत में दिखाया गया है, तो दोनों इनपुट का एक साथ उपयोग किया जा सकता है। इनपुट एक साथ जुड़े हुए नहीं हैं, मेरा मतलब है कि PA12 पर सिग्नल PE7 में स्थानांतरित नहीं हुआ है और इसके विपरीत (क्योंकि GPIO को इनपुट के रूप में सेट किया गया है)।

कोड "STM32CubeF4 v5.3" + "फ़र्मवेयर पैकेज V1.24.0 / 08-February-2019" द्वारा जनरेट किया गया है।


2

मूल रूप से, पिन GPIO हैं जिन्हें वैकल्पिक कार्यों के लिए सौंपा जा सकता है, जैसे UART_RX। प्रत्येक वैकल्पिक फ़ंक्शन में यह डिफ़ॉल्ट पिन और वैकल्पिक पिन होता है जिससे फ़ंक्शन को रीमैप किया जा सकता है। यदि आप खंड 9.1.5 में STM32F103 के संदर्भ मैनुअल की जाँच करते हैं , तो वे कहते हैं:

विभिन्न डिवाइस पैकेजों के लिए परिधीय I / O फ़ंक्शन की संख्या को अनुकूलित करने के लिए, कुछ अन्य पिनों के लिए कुछ वैकल्पिक कार्यों को रीमैप करना संभव है। यह सॉफ्टवेयर द्वारा प्राप्त किया जाता है, इसी रजिस्टर को प्रोग्रामिंग करके (पृष्ठ 177 पर AFIO रजिस्टरों को देखें। उस स्थिति में, वैकल्पिक फ़ंक्शन अब उनके मूल असाइनमेंट पर मैप नहीं किए जाते हैं


जिस तरह से मैंने यह किया है वह यह है: एक बार जब आप नए पिन असाइन करते हैं, तो पिछला असाइनमेंट हटा दिया जाता है, इसलिए आप तकनीकी रूप से एक ही परिधीय फ़ंक्शन से जुड़े कई पिन नहीं कर सकते हैं।
dext0rb

1
यह संभव नहीं है, क्योंकि (कम से कम F103 पर, मैंने STM32 के अन्य डेरिवेटिव के साथ काम नहीं किया है), वैकल्पिक पिन को रिमैप सुविधा का उपयोग किए बिना फ़ंक्शन को नहीं सौंपा जा सकता है, भले ही आपने इसे AF_Output के रूप में सेट किया हो। GPIO सेटअप। और रीमैपिंग के बाद, फ़ंक्शन i अब मूल पिन पर उपलब्ध नहीं है। मुझे आशा है कि यह स्पष्ट करता है कि मेरा क्या मतलब था।
मनु

1
जिस तरह से यह किया गया है वह अलग-अलग उपफैमिली पर बहुत अलग है। एफ 1 रजिस्टर संरचना इसे प्रतिबंधित कर सकती है, लेकिन एफ 3 संरचना अलग है, जहां आप पिन को फ़ंक्शन के बजाय वैकल्पिक फ़ंक्शन में पिन से कॉन्फ़िगर करते हैं, इसलिए डुप्लिकेट मैपिंग संभव लगते हैं। वास्तव में, आप पूछे गए प्रश्न की स्थिति का जवाब नहीं दे रहे हैं, जो कि उस हिस्से के बारे में प्रतीत होता है जहां रजिस्टर संरचना इसकी अनुमति देती है।
क्रिस स्ट्रैटन

1
@ क्रिस स्ट्रैटन STM32F302 रेफ मैनुअल अनुभाग 8.3.2: "डिवाइस I / O पिन मल्टीप्लेक्स के माध्यम से ऑनबोर्ड बाह्य उपकरणों / मॉड्यूल से जुड़े होते हैं जो केवल एक परिधीय वैकल्पिक फ़ंक्शन (AF) को एक समय में I / O पिन से कनेक्ट करने की अनुमति देता है।" इस तरह, समान I / O पिन पर उपलब्ध बाह्य उपकरणों के बीच कोई संघर्ष नहीं हो सकता है । " लेकिन वास्तव में, यह एक AF पर कई I / O के बारे में कुछ नहीं कहता है। क्या इनपुट पिन के लिए भी कई विकल्प हैं?
मनु

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