STM32 और ST-LINK - सफल प्रोग्रामिंग के बाद MCU से कनेक्ट नहीं हो सकता


13

मैंने STM32F7-45VGT6 के साथ अपना बोर्ड बनाया है। मैंने इसे सफलतापूर्वक ST-LINK v2 (हालांकि मूल एक नहीं) के साथ क्रमादेशित किया है और अब मैं MCU से भी नहीं जुड़ सकता।

मैं एसटी और एसडीडी इंटरफेस से एसटी-लिंक उपयोगिता का उपयोग करता हूं। यह मामला हो सकता है कि मैं आउटपुट के रूप में SWD पिन का उपयोग करता हूं और अपने कोड में मैंने उन्हें GPIO आउटपुट के रूप में सेट किया है। क्या यह मामला हो सकता है?

फिर भी, मैं अपने रीसेट पिन को जीएनडी से जोड़ता हूं और एसटी-लिंक उपयोगिता में "कनेक्ट अंडर रीसेट" विकल्प सेट करता हूं, लेकिन यह काम नहीं करता है ... मैं क्या कर सकता हूं?

इंटरनेट पर, मैंने BOOT0 पिन का उपयोग करने के बारे में कुछ पाया है, लेकिन मुझे वास्तव में नहीं पता ...


"यह ऐसा हो सकता है कि मैं आउटपुट के रूप में SWD पिन का उपयोग करता हूं" यह संभव है, लेकिन केवल एक ही है जो आपको जानता है, जब तक कि आप का मतलब एक फर्मवेयर के दूषित लोड से नहीं है जो जानबूझकर ऐसा नहीं करता है, लेकिन इसके परिणामस्वरूप हो सकता है त्रुटि, जो वास्तव में होती है। आम तौर पर यह मैन्युअल रूप से या स्वचालित रूप से या तो हार्डवेयर रीसेट के साथ प्रारंभिक SWD कनेक्शन का प्रदर्शन करके पुनर्प्राप्त करने योग्य होता है। यदि आप SWD पिन का उपयोग करना चाहते हैं क्योंकि I / O में कुछ सेकंड की देरी होने से पहले उस सेटिंग को विकसित करना आसान हो सकता है, लेकिन यह महसूस करें कि अभी भी इसका मतलब है कि आप डीबगर का उपयोग नहीं कर सकते हैं।
क्रिस स्ट्रैटन

जवाबों:


21

मैं उस समस्या को हल करने में कामयाब रहा। अगर किसी को भी इसी तरह की समस्या आती है, तो मैंने यहाँ क्या किया है:

मैंने ST-Link v2 और ST-Link उपयोगिता का उपयोग किया। सेटिंग में, मैंने "कनेक्ट अंडर रीसेट" और एसडीडी इंटरफ़ेस (मैं आवृत्ति के बारे में निश्चित नहीं हूं) को सेट किया।
फिर मैंने अपने बोर्ड पर रीसेट बटन दबाया और "लक्ष्य" - "मिटाएं चिप" पर क्लिक किया और बस क्लिक करने के बाद मैंने बटन जारी किया - इसने चिप को मिटा दिया इसलिए मैं अब अपने एमसीयू को फिर से शुरू कर सकता हूं।


वैसे भी, यदि आपको आउटपुट के रूप में SWD पिन का उपयोग करने की आवश्यकता है, तो प्रोग्राम की शुरुआत में कुछ देरी जोड़ें या आउटपुट के रूप में इन पिन को अक्षम / सक्षम करने के लिए कुछ जम्पर का उपयोग करें।


हां, अगर आप एक अलग उद्देश्य के लिए SWD पिन का उपयोग करते हैं, तो यह बहुत अधिक होने की उम्मीद है। अनुभव से पता चलता है कि STM32 डिज़ाइन जो जानबूझकर ऐसा नहीं करते हैं, कभी-कभी एक मोड में "अटक" सकते हैं जहां SWD पिन अनुत्तरदायी (भ्रष्ट प्रोग्राम?) हैं और वसूली के लिए इस तरह के उपचार की आवश्यकता होती है।
क्रिस स्ट्रैटन

1
Linux में, मैंने इस bash कमांड का इस्तेमाल चिप को मिटाने के लिए किया: st-flash erase
nathan

मिटा चिप मेरे लिए काम नहीं किया। मैं टारगेट -> इरेज़ सेक्टर्स -> सभी को चुनें -> लागू करने गया। इसके बाद मैंने अपने बोर्ड की पहुंच पुनः प्राप्त कर ली। मुझे यकीन है कि नहीं कर रहा हूँ क्यों चिप मिटा शब्द नहीं था
एंड्रयू

6

एसटी-लिंक को काम करने के लिए रीसेट के तहत कनेक्ट करने के लिए रीसेट पिन पर नियंत्रण होना चाहिए, यदि आप इसे ग्राउंड पर रखते हैं तो एसटी-लिंक को लक्ष्य चलाने का मौका नहीं मिलता है और इसके लिए पहुंच प्राप्त होती है।


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

बूटलोडर के अंदर SWD पिन एक्सेस पाने के लिए उपलब्ध होना चाहिए, लेकिन मुझे इस पर 100% यकीन नहीं है।

ST फ्लैश लोडर प्रदर्शनकर्ता एक उपकरण है जो आपको UART इंटरफ़ेस का उपयोग करके माइक्रो को मिटाने / प्रोग्राम करने की अनुमति देता है। यदि आप अपने माइक्रो के किसी भी UARTs तक नहीं पहुंच सकते हैं, तो यह समाधान आपके लिए काम नहीं करेगा।


मैं USART3 का उपयोग कर सकता हूं जो बूटलोडर द्वारा समर्थित है, इसलिए मैं कोशिश करूंगा कि बाद में - यह मुश्किल हो जाएगा, cos BOOT0 पीसीबी पर GND से बंधा हुआ है ... लेकिन मैं जानना चाहता हूं कि क्या गलत है। मैंने क्या गलत किया है? मैं अपने मुख्य () फ़ंक्शन में SWD / JTAG पिन को आउटपुट के रूप में सेट करता हूं। लेकिन यह मैनुअल में कहा गया है कि रीसेट के दौरान सभी पिनों का डिफ़ॉल्ट फ़ंक्शन होता है और इसे तुरंत उपयोग किया जा सकता है। तो क्यों मैं रीसेट के तहत फ्लैश मिटा नहीं सकता? मैंने U-LINK 2 प्रोग्रामर और uVision 5 का भी परीक्षण किया है। मुझे उम्मीद है कि कोई सुरक्षा स्तर नहीं था - किसी तरह गलती से - सेट। मैं इस तरह के किसी भी बिट सेट नहीं किया था, लेकिन अगर सुरक्षा बिट्स ठीक कर रहे हैं वहाँ परीक्षण करने के लिए कोई रास्ता नहीं है?
zupazt3 16

@ zupazt3 मुझे अशिष्टता से कोई मतलब नहीं है, लेकिन कृपया मेरे पहले वाक्य को फिर से पढ़ें। इसमें रीसेट अंडर कनेक्ट के साथ समस्या का जवाब है। यदि आप इसे नहीं समझते हैं, तो अधिक विशिष्ट टिप्पणी पोस्ट करें।
शस्त्रागार

लेकिन मैं इसे हर समय नहीं बाँधता हूँ :) मेरी पहली पोस्ट में मेरा मतलब था कि मैंने यह जाँचने के लिए सीधे जीएनडी से बाँध लिया कि क्या यह मदद करेगा। लेकिन आम तौर पर मैं एनआरएसटी को जीएनडी से नहीं बांधता, बल्कि एक प्रोग्रामर को देता हूं, इसलिए इसे रीसेट करने पर नियंत्रण होता है। और यह अभी भी कनेक्ट नहीं होगा। मैंने U-Link 2 और Keil uVision 5 का उपयोग करने की भी कोशिश की लेकिन उसी परिणाम के साथ। क्या कारण हो सकता है?
zupazt3

@ zupazt3 जो आपके प्रश्न से बिल्कुल स्पष्ट नहीं था। शायद SWD घड़ी को बढ़ाने में मदद मिल सकती है, क्योंकि यह आउटपुट पर लक्ष्य स्विच करने से पहले कनेक्शन प्राप्त कर सकता है। लेकिन मैंने गलती से SWD पिन को आउटपुट में सेट कर दिया है और अपने लक्ष्य के लिए कनेक्शन नहीं पा रहा था और केवल BOOT0 का उपयोग करके मैं इसे पुनर्प्राप्त करने में सक्षम था, अगर आपने उन्हें सीधे जमीन पर बांध दिया (बिना किसी अवरोधक के) तो यह एट हो जाएगा कठोर।
शस्त्रागार

1
मैं अंत में चिप को मिटाने में कामयाब रहा! एसटी-लिंक उपयोगिता के साथ - मैंने रीसेट बटन दबाया, "पूर्ण मिटाएं" और रिलीज बटन पर क्लिक किया और यह किसी तरह खुद को मिटा दिया और अब यह काम करता है। मैंने कोशिश की कि पहले लेकिन अब केवल यह काम किया।
zupazt3 20

3

यदि आप stmcubemx का उपयोग कर रहे हैं, तो आपको stmcube pinout टैब पर सीरियल वायर को कॉन्फ़िगर करने की आवश्यकता है। पिनआउट टैब पर, SYS पर क्लिक करें और डिबग विकल्प को सीरियल वायर में बदलें। यह मेरी समस्या को ठीक करता है, और शायद आपकी समस्या भी।


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

मैंने सबसे पहले अपने पिन को SYS_SW के रूप में सेट किया .... लेकिन वे नारंगी रंग के थे। कोड अपलोड करने के बाद चिप से कनेक्ट करने में भी समस्या थी। जब मैंने SYS- सीरियल वायर में डिबग मोड का चयन किया, तो चिप समतल होने के बाद सामान्य रूप से जुड़ जाती है।
gtu

1

मैंने अपने खुद के STM32F427 बोर्ड में कुछ कोड डाउनलोड किए। फिर मैं एसटी-लिंक उपयोगिता का उपयोग करके अपने बोर्ड से जुड़ नहीं सकता। मुझे लगता है कि मेरा कोड डिबग पोर्ट पिन कॉन्फ़िगरेशन को गड़बड़ कर सकता है (और पुष्टि नहीं कर सकता है)। मैंने अपना बोर्ड बनाने के लिए निम्नलिखित किया है:

  1. ST-LINK उपयोगिता खोलें और लक्ष्य मेनू में "कनेक्ट" के लिए तैयार हो जाएं।
  2. अपने बोर्ड को पावर दें (मेरे मामले में, मैं एक यूएसबी केबल का उपयोग करता हूं) और उसी समय में एसटी-लिंक उपयोगिता से "कनेक्ट" पर क्लिक करें।

मैंने इस चाल के साथ 2 बोर्ड बहाल किए। उम्मीद है की यह मदद करेगा। --Bob


1

जैसे डिलि ने कहा:

यदि आप stmcubemx का उपयोग कर रहे हैं, तो आपको stmcube pinout टैब पर सीरियल वायर को कॉन्फ़िगर करने की आवश्यकता है। पिनआउट टैब पर, SYS पर क्लिक करें और डिबग विकल्प को सीरियल वायर में बदलें। यह मेरी समस्या को ठीक करता है, और शायद आपकी समस्या भी।

STM32CubeMx डिबग पोर्ट को डिफ़ॉल्ट रूप से कॉन्फ़िगर नहीं करता है, फलस्वरूप एसटी-लिंक आपके कोड को फ्लैश करते ही काम करना बंद कर देगा। आपको उदाहरण के लिए एसटी-लिंक उपयोगिता के साथ चिप को मिटाना होगा। MCU से जुड़ने के लिए मुझे बूटलोडर को सक्रिय करने के लिए पावर के दौरान BOOT0 पिन को ऊंचा खींचना पड़ा है। इसके बाद Tarjet मेनू और Erase चिप पर जाएं


0

MCU को री-प्रोग्राम करने के लिए, रीसेट बटन दबाए रखें और ST-Link यूटिलिटी में डिवाइस से कनेक्ट का चयन करें या अपने IDE (उदाहरण केइल) में डाउनलोड दबाएं और फिर रीसेट बटन छोड़ दें।


-1

बूट पिन (कुछ संस्करणों में बिट्स) डिबगर को शुरू होने से रोक सकता है। सुनिश्चित करें कि आप स्टार्टअप पर बूट पैटर्न (बूट 0 और बूट 1 पिन पर निश्चित बाइनरी पैटर्न) को लागू नहीं करते हैं, अन्यथा आपका एमसीयू बूट स्थिति में आ जाएगा।


मुझे GND से बूट बूट पिन मिला है ... मुझे यकीन नहीं है कि आपने क्या लिखा है, क्योंकि - जैसा कि मैंने कहा - मैं अपने फ्लैश को सफलतापूर्वक प्रोग्राम करने में कामयाब रहा और प्रोग्राम अभी भी MCU पर ही निष्पादित होता है - मैं सिर्फ ST के साथ MCU से कनेक्ट नहीं कर सकता SWD इंटरफ़ेस पर क्लिक करें। रीसेट के तहत इसे बूटिंग निष्पादित नहीं करना चाहिए और पिन डिफ़ॉल्ट स्थिति में होना चाहिए, इसलिए मुझे समझ नहीं आता कि यह कनेक्ट क्यों नहीं होता है।
zupazt3 13

क्या अापको उस बारे में पूर्ण विशवास है? आप किस संयोजन को मानते हैं कि SWD को एक तरह से निष्क्रिय कर दिया जाएगा, जिसमें रीसेट का हेरफेर ओवरराइड नहीं कर सकता है?
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.