STM32 & ST-LINK - ไม่สามารถเชื่อมต่อกับ MCU หลังจากการตั้งโปรแกรมสำเร็จ


13

ฉันได้สร้างบอร์ดของตัวเองด้วย STM32F7-45VGT6 ฉันได้ตั้งโปรแกรมสำเร็จด้วย ST-LINK v2 (ไม่ใช่แบบดั้งเดิม) และตอนนี้ฉันไม่สามารถเชื่อมต่อกับ MCU ได้

ฉันใช้ ST-Link Utility จากอินเตอร์เฟส ST และ SWD อาจเป็นกรณีที่ฉันใช้หมุด SWD เป็นเอาท์พุทและในรหัสของฉันฉันตั้งพวกเขาเป็นเอาท์พุท GPIO เป็นไปได้ไหม?

อย่างไรก็ตามฉันเชื่อมต่อพินการรีเซ็ตเป็น GND และตั้งค่าตัวเลือก "เชื่อมต่อภายใต้การตั้งค่าใหม่" ในยูทิลิตี้ ST-Link แต่มันไม่ทำงาน ... ฉันจะทำอย่างไร

บนอินเทอร์เน็ตฉันพบบางอย่างเกี่ยวกับการใช้ BOOT0 Pin แต่ฉันไม่รู้แน่ชัดว่า ...


"อาจเป็นกรณีที่ฉันใช้ SWD พินเป็นเอาต์พุต" ที่เป็นไปได้ แต่มีเพียงคนเดียวเท่านั้นที่จะรู้ว่าคุณเว้นแต่คุณจะหมายถึงการโหลดเฟิร์มแวร์ที่เสียหายซึ่งไม่ได้ตั้งใจทำ แต่อาจเป็นผลมาจาก ข้อผิดพลาดซึ่งจะเกิดขึ้นอย่างแน่นอน โดยทั่วไปจะสามารถกู้คืนได้โดยดำเนินการเชื่อมต่อ SWD เริ่มต้นด้วยการรีเซ็ตฮาร์ดแวร์ที่ยืนยันด้วยตนเองหรือโดยอัตโนมัติ หากคุณต้องการใช้หมุด SWD เนื่องจาก I / O ของการหน่วงเวลาสองสามวินาทีก่อนที่จะทำการตั้งค่านั้นอาจทำให้การพัฒนาง่ายขึ้น แต่ตระหนักว่ายังคงหมายความว่าคุณไม่สามารถใช้ดีบักเกอร์ได้
Chris Stratton

คำตอบ:


21

ฉันจัดการเพื่อแก้ไขปัญหานั้น หากใครพบปัญหาที่คล้ายกันนี่คือสิ่งที่ฉันทำ:

ฉันใช้ ST-Link v2 และ ST-Link Utility ในการตั้งค่าฉันตั้งค่า "เชื่อมต่อภายใต้การรีเซ็ต" และอินเตอร์เฟส SWD (ฉันไม่แน่ใจเกี่ยวกับความถี่)
จากนั้นฉันกดปุ่มรีเซ็ตบนบอร์ดของฉันและคลิก "เป้าหมาย" -> "ลบชิป" และหลังจากคลิกฉันปล่อยปุ่ม - มันลบชิปดังนั้นตอนนี้ฉันสามารถ reprogram MCU ของฉันได้แล้ว


อย่างไรก็ตามหากคุณต้องการใช้หมุด SWD เป็นเอาต์พุตให้เพิ่มการหน่วงเวลาที่จุดเริ่มต้นของโปรแกรมหรือใช้จัมเปอร์บางตัวเพื่อปิด / เปิดใช้งานการตั้งค่าหมุดเหล่านี้เป็นเอาต์พุต


ใช่นั่นเป็นเรื่องที่คาดหวังมากหากคุณใช้หมุด SWD เพื่อจุดประสงค์อื่น ประสบการณ์แสดงให้เห็นว่าแม้การออกแบบ STM32 ที่ไม่ได้ตั้งใจทำก็สามารถติด "" ในบางครั้งในโหมดที่หมุด SWD ไม่ตอบสนอง (โปรแกรมเสียหาย?) และต้องการการรักษาดังกล่าวเพื่อการกู้คืน
Chris Stratton

1
ใน linux ฉันใช้คำสั่ง bash นี้เพื่อลบชิป: st-flash erase
nathan

ชิปลบไม่ทำงานสำหรับฉัน ฉันไปที่เป้าหมาย -> ลบภาค -> เลือกทั้งหมด -> ใช้ หลังจากนี้ฉันสามารถเข้าถึงบอร์ดของฉันได้อีกครั้ง ฉันไม่แน่ใจว่าทำไมการลบชิปไม่ได้พูด
แอนดรูว์

6

สำหรับการเชื่อมต่อภายใต้การรีเซ็ตเพื่อใช้งาน ST-Link จะต้องมีการควบคุมพินการรีเซ็ตหากคุณเชื่อมต่อกับกราวด์ ST-Link จะไม่มีโอกาสที่จะทำให้เป้าหมายทำงานและเข้าถึงได้


หากคุณดึง BOOT0 สูงในระหว่างเปิดเครื่อง MCU จะเริ่มเข้าสู่ bootloader ภายในและคุณสามารถเข้าถึงได้โดยใช้โปรโตคอลอนุกรมหลายตัว (ดูคู่มืออ้างอิงสำหรับรายละเอียดเพิ่มเติม)

ภายใน bootloader หมุด SWD ควรจะสามารถเข้าถึงได้ แต่ฉันไม่แน่ใจ 100%

ST Flash Loader Demonstratorเป็นเครื่องมือที่ช่วยให้คุณสามารถลบ / ตั้งโปรแกรมไมโครโดยใช้ส่วนต่อประสาน UART หากคุณไม่สามารถเข้าถึงไมโคร UART ใด ๆ ของคุณได้โซลูชันนี้จะไม่ทำงานสำหรับคุณ


ฉันสามารถเข้าถึง USART3 ซึ่งรองรับโดย bootloader ดังนั้นฉันจะลองอีกครั้งในภายหลัง - จะยุ่งยากเพราะ BOOT0 เชื่อมโยงกับ GND บน PCB ... แต่ฉันอยากรู้ว่ามีอะไรผิดปกติ ฉันทำอะไรผิดไป ฉันตั้งค่าหมุด SWD / JTAG เป็นเอาท์พุทในฟังก์ชั่น main () ของฉัน แต่มันบอกในคู่มือว่าในระหว่างการรีเซ็ตพินทั้งหมดมีฟังก์ชั่นเริ่มต้นและสามารถใช้งานได้ทันที เหตุใดฉันจึงไม่สามารถลบแฟลชภายใต้การรีเซ็ตได้ ฉันยังได้ทดสอบโปรแกรมเมอร์ U-LINK 2 และ uVision 5 ฉันหวังว่าจะไม่มีการป้องกันในระดับใดระดับหนึ่งโดยไม่ตั้งใจ ฉันไม่ได้ตั้งค่าบิตดังกล่าว แต่มีวิธีใดที่จะทดสอบว่าบิตการป้องกันใช้ได้หรือไม่
zupazt3

@ zupazt3 ฉันไม่ได้ตั้งใจหยาบคาย แต่โปรดอ่านประโยคแรกของฉันอีกครั้ง มันมีคำตอบสำหรับปัญหาเกี่ยวกับการเชื่อมต่อภายใต้การรีเซ็ต หากคุณไม่เข้าใจโพสต์ความคิดเห็นที่เฉพาะเจาะจงมากขึ้น
อาร์เซนอล

แต่ฉันไม่ได้ผูกมันตลอดเวลา :) ในโพสต์แรกของฉันฉันหมายความว่าฉันผูกมันโดยตรงกับ GND เพื่อตรวจสอบว่ามันจะช่วยได้หรือไม่ แต่โดยปกติฉันไม่ได้ผูก NRST กับ GND แต่เป็นโปรแกรมเมอร์ดังนั้นจึงสามารถควบคุมการรีเซ็ตได้ และมันยังคงไม่เชื่อมต่อ ฉันพยายามใช้ U-Link 2 และ Keil uVision 5 ด้วยผลลัพธ์เดียวกัน อะไรคือเหตุผล?
zupazt3

@ zupazt3 ที่ไม่ชัดเจนจากคำถามของคุณ อาจเพิ่มนาฬิกา SWD อาจช่วยได้เนื่องจากอาจได้รับการเชื่อมต่อก่อนที่เป้าหมายจะสลับไปที่เอาต์พุต แต่ฉันตั้งใจตั้งค่า SWD พินเพื่อเอาท์พุทและไม่สามารถเชื่อมต่อกับเป้าหมายของฉันและใช้บูท 0 เท่านั้นฉันสามารถกู้คืนได้ถ้าคุณผูกมันลงกับพื้นโดยตรง (โดยไม่มีตัวต้านทาน) สิ่งนี้จะ ยาก.
อาร์เซนอล

1
ในที่สุดฉันก็สามารถลบชิปได้! ด้วยยูทิลิตี้ ST-Link - ฉันกดปุ่มรีเซ็ตคลิก "ลบแบบเต็ม" และปุ่มปลดล็อคและมันจะทำการลบตัวเองและตอนนี้ก็ใช้งานได้ ฉันลองมันมาก่อน แต่ตอนนี้มันใช้ได้แล้ว
zupazt3

3

หากคุณใช้ stmcubemx คุณจำเป็นต้องกำหนดค่า wire wire บนแท็บ stmcube pinout บนแท็บ pinout คลิก SYS และเปลี่ยนตัวเลือกการดีบักเป็น wire wire มันแก้ไขปัญหาของฉันและอาจเป็นปัญหาของคุณด้วย


ในขณะที่อาจเป็นปัญหาถ้าปล่อยให้หมุด SWD ในการเริ่มต้นเปิดโหมด SWD ไม่ใช่การตั้งค่าเริ่มต้นของชุดซอฟต์แวร์นี้นั่นเป็นข้อบกพร่องในการใช้งานที่ค่อนข้างรุนแรงซึ่งต้องการรายงานข้อผิดพลาดและการแก้ไข คุณแน่ใจหรือว่าคุณไม่ได้เปลี่ยนการตั้งค่าจากค่าดั้งเดิมหรือเริ่มต้นด้วยโปรเจ็กต์ที่ต้องการโดยใช้พินเหล่านั้นในแบบที่ไม่ใช่ค่าเริ่มต้น
Chris Stratton

ก่อนอื่นฉันแค่ตั้งพินเป็น SYS_SW .... แต่พวกมันมีสีส้ม มีปัญหาในการเชื่อมต่อกับชิปหลังจากอัปโหลดรหัส เมื่อฉันเลือกโหมดดีบั๊กใน SYS-Serial Wire ชิปจะเชื่อมต่อตามปกติหลังจากการกะพริบ
gtu

1

ฉันดาวน์โหลดรหัสไปยังบอร์ด STM32F427 ของฉันเอง จากนั้นฉันไม่สามารถเชื่อมต่อกับบอร์ดโดยใช้ ST-LINK Utility ได้อีก ฉันคิดว่ารหัสของฉันยุ่งเกี่ยวกับการกำหนดค่าพอร์ตการดีบัก (? ไม่สามารถยืนยันได้) สิ่งที่ฉันทำมีดังต่อไปนี้เพื่อทำการเชื่อมต่อและ reprogram บอร์ดของฉัน:

  1. เปิด ST-LINK Utility และเตรียมพร้อมที่จะ "เชื่อมต่อ" ในเมนูเป้าหมาย
  2. เพิ่มกำลังให้บอร์ดของคุณ (ในกรณีของฉันฉันใช้สาย USB) และในเวลาเดียวกันให้คลิก "เชื่อมต่อ" จาก ST-LINK Utility

ฉันคืนค่าบอร์ด 2 บอร์ดด้วยเคล็ดลับนี้ หวังว่านี่จะช่วยได้ --Bob


1

เช่นเดียวกับดิลีกล่าวว่า:

หากคุณใช้ stmcubemx คุณจำเป็นต้องกำหนดค่า wire wire บนแท็บ stmcube pinout บนแท็บ pinout คลิก SYS และเปลี่ยนตัวเลือกการดีบักเป็น wire wire มันแก้ไขปัญหาของฉันและอาจเป็นปัญหาของคุณด้วย

STM32CubeMx ไม่ได้กำหนดค่าพอร์ตดีบักตามค่าเริ่มต้นดังนั้น ST-Link จะหยุดทำงานเมื่อคุณแฟลชรหัสของคุณ คุณต้องลบชิปด้วย ST-link Utility เช่น ในการเชื่อมต่อกับ MCU ฉันต้องดึง BOOT0 สูงในระหว่างเปิดเครื่องเพื่อเปิดใช้งาน bootloader จากนั้นไปที่เมนู Tarjetและชิปลบ


0

ในการตั้งโปรแกรม MCU อีกครั้งให้กดปุ่มรีเซ็ตค้างไว้แล้วเลือกเชื่อมต่อกับอุปกรณ์ใน ST-Link Utility หรือกดดาวน์โหลดใน IDE ของคุณ (เช่น Keil) จากนั้นปล่อยปุ่มรีเซ็ต


-1

หมุดสำหรับเริ่มระบบ (บิตในบางรุ่น) สามารถป้องกันไม่ให้ดีบักเกอร์เริ่มทำงาน ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้รูปแบบการบูตเมื่อเริ่มต้น (รูปแบบไบนารีบางอย่างใน boot0 และ boot1 pin) ไม่เช่นนั้น MCU ของคุณจะเข้าสู่สถานะบู๊ต


ฉันได้รับ boot0 pin ที่เชื่อมโยงกับ GND ... ฉันไม่แน่ใจเกี่ยวกับสิ่งที่คุณเขียนเพราะ - อย่างที่ฉันบอก - ฉันสามารถจัดการโปรแกรมแฟลชของฉันได้สำเร็จและโปรแกรมยังคงประมวลผลตัวเองบน MCU - ฉันไม่สามารถเชื่อมต่อกับ MCU ด้วย ST เชื่อมโยงผ่านทางอินเตอร์เฟส SWD ภายใต้การรีเซ็ตมันไม่ควรทำการบูทและหมุดควรอยู่ในสถานะเริ่มต้นดังนั้นฉันจึงไม่เข้าใจว่าทำไมมันถึงไม่เชื่อม
zupazt3

คุณแน่ใจหรือไม่ คุณเชื่อว่าชุดค่าผสมใดจะปิดใช้งาน SWD ในลักษณะที่การจัดการการรีเซ็ตไม่สามารถแทนที่ได้?
Chris Stratton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.