STM32 & ST-LINK - Tidak dapat terhubung ke MCU setelah pemrograman berhasil


13

Saya telah membuat board sendiri dengan STM32F7-45VGT6. Saya telah berhasil memprogramnya dengan ST-LINK v2 (bukan yang asli sekalipun) dan sekarang saya bahkan tidak dapat terhubung dengan MCU.

Saya menggunakan ST-Link Utility dari antarmuka ST dan SWD. Bisa jadi saya menggunakan pin SWD sebagai output dan dalam kode saya saya menetapkan mereka sebagai output GPIO. Bisakah itu terjadi?

Namun demikian, saya menghubungkan pin reset saya ke GND dan mengatur opsi "Connect under reset" di ST-Link Utility tetapi tidak berfungsi ... Apa yang bisa saya lakukan?

Di Internet, saya telah menemukan sesuatu tentang penggunaan Pin BOOT0, tapi saya tidak tahu persis ...


"Bisa jadi saya menggunakan pin SWD sebagai output" itu mungkin, tetapi satu-satunya yang akan tahu adalah Anda, kecuali jika Anda bermaksud memuat firmware yang rusak yang tidak disengaja melakukan itu, tetapi mungkin karena kesalahan, yang memang terjadi. Umumnya ini dapat dipulihkan dengan melakukan koneksi SWD awal dengan pengaturan ulang perangkat keras yang ditetapkan, baik secara manual atau otomatis. Jika Anda ingin menggunakan pin SWD sebagai I / O menunda beberapa detik sebelum membuat pengaturan itu dapat membuat pengembangan lebih mudah, tetapi sadari masih berarti Anda tidak dapat menggunakan debugger.
Chris Stratton

Jawaban:


21

Saya berhasil menyelesaikan masalah itu. Jika ada yang mengalami masalah serupa, inilah yang saya lakukan:

Saya menggunakan ST-Link v2 dan ST-Link Utility. Dalam pengaturan, saya mengatur "Connect under reset" dan antarmuka SWD (Saya tidak yakin tentang frekuensi).
Kemudian saya menekan tombol reset di papan saya dan mengklik "Target" -> "Hapus chip" dan setelah mengklik saya lepaskan tombol - Menghapus chip sehingga saya sekarang dapat memprogram ulang MCU saya.


Bagaimanapun, jika Anda perlu menggunakan pin SWD sebagai output, maka tambahkan beberapa penundaan di awal program atau gunakan beberapa jumper untuk menonaktifkan / mengaktifkan pengaturan pin ini sebagai output.


Ya, itu cukup banyak yang diharapkan jika Anda menggunakan pin SWD untuk tujuan yang berbeda. Pengalaman menunjukkan bahwa bahkan desain STM32 yang tidak sengaja melakukannya kadang-kadang bisa "macet" dalam mode di mana pin SWD tidak responsif (program rusak?) Dan memerlukan perlakuan seperti itu untuk pemulihan.
Chris Stratton

1
Di linux, saya menggunakan perintah bash ini untuk menghapus chip: st-flash erase
nathan

Chip Erase tidak bekerja untuk saya. Saya pergi ke Target -> Hapus Sektor -> Pilih semua -> terapkan. Setelah ini, saya mendapatkan kembali akses papan saya. Saya tidak yakin mengapa chip tidak menghapus kata
andrew

6

Agar koneksi under reset berfungsi, ST-Link harus memiliki kendali atas pin reset, jika Anda mengikatnya ke ground, ST-Link tidak memiliki peluang untuk menjalankan target dan mendapatkan akses ke sana.


Jika Anda menarik pin BOOT0 tinggi saat power up, MCU akan mulai masuk ke bootloader internal dan Anda dapat memperoleh akses menggunakan beberapa protokol serial (lihat manual referensi untuk detail lebih lanjut).

Di dalam bootloader pin SWD harus tersedia untuk mendapatkan akses, tapi saya tidak 100% yakin tentang ini.

ST Flash Loader Demonstrator adalah alat yang memungkinkan Anda untuk menghapus / memprogram mikro menggunakan antarmuka UART. Jika Anda tidak dapat mengakses UART mikro apa pun, solusi ini tidak akan berfungsi untuk Anda.


Saya dapat mengakses USART3 yang didukung oleh bootloader, jadi saya akan mencobanya nanti - itu akan rumit, karena BOOT0 terkait dengan GND pada PCB ... Tapi saya ingin tahu apa yang salah. Apa yang salah yang telah saya lakukan? Saya mengatur pin SWD / JTAG sebagai output dalam fungsi main () saya. Tetapi dikatakan secara manual bahwa selama reset semua pin memiliki fungsi default dan dapat segera digunakan. Jadi mengapa saya tidak bisa menghapus flash di bawah reset? Saya juga telah menguji programmer U-LINK 2 dan uVision 5. Saya berharap tidak ada level perlindungan - entah bagaimana tidak sengaja - ditetapkan. Saya tidak mengatur bit seperti itu, tetapi apakah ada cara untuk menguji apakah bit perlindungan ok?
zupazt3

@ zupazt3 Saya tidak bermaksud terdengar kasar, tapi tolong baca kembali kalimat pertama saya. Ini berisi jawaban untuk masalah dengan koneksi yang diatur ulang. Jika Anda tidak memahaminya, kirim komentar yang lebih spesifik.
Arsenal

Tapi saya tidak mengikatnya sepanjang waktu :) Dalam posting pertama saya, saya maksudkan bahwa saya bahkan mengikatnya langsung ke GND untuk memeriksa apakah itu akan membantu. Tapi biasanya saya tidak mengikat NRST ke GND, tetapi ke seorang programmer, sehingga ia memiliki kendali atas pengaturan ulang. Dan itu masih tidak akan terhubung. Saya juga mencoba menggunakan U-Link 2 dan Keil uVision 5 tetapi dengan hasil yang sama. Apa yang bisa menjadi alasan?
zupazt3

@ zupazt3 yang tidak begitu jelas dari pertanyaan Anda. Mungkin menambah jam SWD mungkin membantu, karena mungkin mendapatkan koneksi sebelum target beralih ke output. Tapi saya tidak sengaja mengatur pin SWD ke output dan tidak bisa mendapatkan koneksi ke target saya dan hanya menggunakan BOOT0 saya bisa memulihkannya, jika Anda mengikatnya ke tanah secara langsung (tanpa resistor) ini akan et sulit.
Arsenal

1
Saya akhirnya berhasil menghapus chip! Dengan ST-Link Utility - saya menekan tombol reset, mengklik "hapus penuh" dan lepaskan tombol dan entah bagaimana itu terhapus sendiri dan sekarang berfungsi. Saya sudah mencobanya sebelumnya tetapi baru sekarang berhasil.
zupazt3

3

jika Anda menggunakan stmcubemx, Anda harus mengkonfigurasi kawat serial pada tab pinout stmcube. pada tab pinout, klik SYS dan ubah opsi debug ke kawat serial. itu memperbaiki masalah saya, dan mungkin masalah Anda juga.


Sementara itu bisa menjadi masalah, Jika meninggalkan pin SWD pada mode power-on default pada mode SWD bukanlah pengaturan default dari rangkaian perangkat lunak ini, itu bisa dibilang cacat kegunaan yang cukup parah yang membutuhkan laporan bug dan koreksi. Apakah Anda yakin tidak mengubah pengaturan dari nilai aslinya, atau mulai dengan proyek tertentu yang mengharuskan menggunakan pin tersebut dengan cara yang tidak standar?
Chris Stratton

Saya pertama-tama hanya mengatur pin saya sebagai SYS_SW .... tetapi warnanya oranye. Juga mengalami masalah saat menyambung ke chip setelah mengunggah kode. Ketika saya memilih mode debug di SYS-Serial Wire, chip terhubung secara normal setelah flasing.
gtu

1

Saya mengunduh beberapa kode ke papan STM32F427 saya sendiri. Maka saya tidak dapat terhubung ke board saya menggunakan ST-LINK Utility lagi. Saya pikir kode saya mengacaukan konfigurasi pin port debug (? Tidak dapat mengkonfirmasi). Apa yang saya lakukan adalah yang berikut untuk membuat koneksi dan memprogram ulang papan saya:

  1. Buka Utilitas ST-LINK dan bersiap-siap untuk "Hubungkan" di menu Target.
  2. Nyalakan papan Anda (dalam kasus saya, saya menggunakan kabel USB) dan PADA SAAT YANG SAMA klik "Hubungkan" dari ST-LINK Utility.

Saya memulihkan 2 papan dengan trik ini. Semoga ini membantu. --Bob


1

Seperti yang dili katakan:

jika Anda menggunakan stmcubemx, Anda harus mengkonfigurasi kawat serial pada tab pinout stmcube. pada tab pinout, klik SYS dan ubah opsi debug ke kawat serial. itu memperbaiki masalah saya, dan mungkin masalah Anda juga.

STM32CubeMx tidak mengkonfigurasi port debug secara default, akibatnya ST-Link akan berhenti berfungsi setelah Anda mem-flash kode Anda. Anda harus menghapus chip dengan ST-link Utility misalnya. Untuk terhubung dengan MCU saya harus menarik pin BOOT0 tinggi saat power up untuk mengaktifkan bootloader. Lalu pergi ke menu Tarjet dan Hapus chip .


0

Untuk memprogram ulang MCU, tahan tombol reset dan pilih connect to device di ST-Link Utility atau tekan unduh di IDE Anda (misalnya Keil) dan kemudian lepaskan tombol reset.


-1

Pin boot (bit dalam beberapa versi) dapat mencegah mulai debugger. Pastikan Anda tidak menerapkan pola boot saat startup (pola biner tertentu pada pin boot0 dan boot1), jika tidak, MCU Anda akan masuk ke kondisi boot.


Saya mendapatkan pin boot0 diikat ke GND ... Saya tidak yakin dengan apa yang Anda tulis, karena - seperti yang saya katakan - saya berhasil memprogram flash saya dan program masih mengeksekusi sendiri di MCU - Saya tidak bisa terhubung ke MCU dengan ST -Link lewat antarmuka SWD. Di bawah reset, seharusnya tidak menjalankan boot dan pin harus dalam keadaan standar jadi saya tidak mengerti mengapa itu tidak terhubung.
zupazt3

Apa kamu yakin akan hal itu? Kombinasi apa yang Anda yakini akan menonaktifkan SWD dengan cara yang manipulasi reset tidak bisa mengesampingkan?
Chris Stratton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.