Saya menggunakan MDK-Lite Versi 5.23 dengan STMicroelectronics STM32F072B-Disco "Discovery" board dan saya mencoba menggunakan Contoh Flash yang disediakan oleh sampel Discovery.
Saya telah menggunakan board dan toolchain ini untuk contoh lain dan saya telah mengkodekan beberapa pekerjaan SPI dan GPIO. IDE bekerja seperti jagoan. Namun, untuk proyek khusus ini saya dapat membuat kode dan menjalankannya dengan mengunduh dan menggunakan tombol reset. Saya tidak dapat menggunakan debugger pada proyek segera setelah saya menggunakan rutin HAL_FLASHEx_Erase (). Setelah saya menjalankan rutin itu, IDE memunculkan dialog "Tidak dapat mengakses target. Mematikan sesi debug."
Untuk apa nilainya, saya tahu ini bukan kesalahan pemrograman karena jika saya mengunduh kode dan kemudian mengeksekusi kode dengan menekan tombol reset itu akan berfungsi. Saya telah menggunakan debugger yang sama ini dengan papan TI dan mampu memprogram flash dan juga menjalankan rutinitas flash. Saya cukup yakin saya tidak menghapus bagian dari flash tempat kode disimpan, jadi bukan itu.
Jika saya melangkahi baris ini di main.c
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
kemudian menjatuhkan sesi debug. Jika saya malah melangkah ke baris yang sama dan kemudian melangkahi masing-masing panggilan dalam rutin menghapus flash, maka itu akan bekerja dan akhirnya keluar dari rutin dan saya bisa men-debug sisa kode.
Jawaban:
Dugaan saya adalah bahwa ini adalah catu daya yang terkait pada tingkat tertentu. Entah catu eksternal, atau on-board switching dari rel daya.
Untuk mengklarifikasi skenario, debug berfungsi dengan baik setelah reset perangkat keras, tetapi ketika target Anda menghapus blok flash, koneksi debug dijatuhkan?
Debug tidak peduli tentang kode yang berjalan dengan benar - Anda bisa dalam keadaan terkunci, dan menghentikan debug masih akan berfungsi. Satu-satunya hal di sisi CPU yang mengunci debug adalah akses AHB menemui jalan buntu. Ini berarti bahwa masalahnya adalah dengan antarmuka SWD antara STM32F7, dan chip antarmuka USB-SWD on-board (juga STM32, saya kira). Perangkat ini memiliki beberapa power rail switching on-board yang membingungkan saya saat pertama kali saya menggunakan board.
Perlu dicatat bahwa penghapusan flash akan meningkatkan aliran perangkat saat ini - apakah PSU eksternal Anda berfungsi, dan dapatkah Anda menggunakan alternatif?
Sunting: Berdasarkan pada umpan balik Anda yang melangkahi kode yang dipermasalahkan menyebabkan debugger mogok, sedangkan langkah-tunggal tidak, saya pikir masalah Anda terkait dengan pertanyaan ini .
Step-over diimplementasikan dengan menggunakan breakpoint (dan polling untuk status berhenti), sedangkan single-step didukung dalam perangkat keras. Ini masih tidak menjelaskan mengapa debugger tampaknya menjadi bingung, tetapi apakah memungkinkan untuk debugger sedang mencoba untuk mengakses kode (dari flash) sementara pengontrol flash aktif.
Berdasarkan pengamatan ini, saya sarankan Anda menetapkan breakpoint setelah penghapusan, dan mencoba untuk menghindari memicu skenario ini.
sumber