Keil uVision MDK-Lite, STM32F072B-papan Penemuan dan flash API

10

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.

netskink
sumber
Tidak yakin, tapi mungkin sisi USB dari CMSIS-DAP telah didaur-daya. Papan itu memiliki distribusi daya yang cukup rumit untuk komponen debug eksternal. Tidak dapat mengakses target mungkin berarti koneksi (melalui kabel serial) ke DAP telah terputus.
Sean Houlihane
Apakah kita berbicara tentang On-board ST-LINK / V2 sebagai debugger?
Bence Kaulics
Jika Anda dapat berbagi gambar kode, orang lain mungkin dapat memverifikasi (dan menyingkirkan masalah perangkat keras). Hanya punya papan M7 sendiri ...
Sean Houlihane
Bence Kaulics, itu debugger yang terpasang di papan diskm stm32f072B. Ini adalah ST-Link Debugger dan bukan debugger Keil ULINK2 yang merupakan ST-LINK / V2. Saya memiliki salah satu debugger Keil usb yang terhubung tetapi terhubung ke papan dengan kabel pita. Saya menggunakan konektor mini usb ST-Link di papan tulis dan bukan konektor kabel pita. Papan mendapatkan daya dari konektor mini-usb dan bukan catu daya terpisah.
netskink
1
Mengenai contoh kode. Sampel disediakan oleh penemuan memperbaiki dari STMicro. Path dari proyek di ST merepotkan adalah Projects / STM32F072B-Discovery / Contoh / FLASH / FLASH_EraseProgram. Saya menggunakan proyek MDK-ARM di direktori itu. Gagal pada baris 108 di mana ia HAL_FLASHEx_Erase ()
netskink

Jawaban:

7

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.

Sean Houlihane
sumber
Benar, itu berfungsi dengan baik tetapi ketika saya menghapus blok koneksi usb ke debugger turun. Saya menggunakan hub usb tidak berdaya jadi ini tampak logis; namun, langsung terhubung ke komputer dan menggunakan hub yang berbeda memberikan hasil yang sama.
netskink
Jika Anda menjalankan kode sambil melakukan akses flash, Anda akan menemui jalan buntu AHB untuk sementara waktu. Saya membayangkan melangkah dalam skenario ini mungkin berantakan. stackoverflow.com/questions/3445598 memiliki lebih banyak.
Sean Houlihane