image credit: http://www.st.com/resource/en/data_brief/stm32cubemx.pdf
Sebagaimana telah diperkenalkan pada artikel yang lalu, STM32CubeMX memang terbukti benar-benar mempermudah pekerjaan para professional embedded developer maupun upaya belajar bagi yang baru memulai. Ada beberapa pengaturan yang diperlukan yang akan ditemui sepanjang proses belajar untuk memaksimalkan penggunaan STM32CubeMX. Salah satu contohnya adalah pengaruh konfigurasi yang dihasilkan (generated) oleh STM32CubeMX pada proses debugging dengan menggunakan OpenOCD. Secara default STM32CubeMX akan mematikan (disable) kemampuan debugging pada mikrokontroler STM32F103C8T6 yang sedanga dikonfigurasi. Jika ini tidak diubah maka proses debugging mikrokontroler STM32F103C8T6 dengan OpenOCD melalui ST-Link V2 (clone) akan terganggu dan menimbulkan kesalahan.
Gambar 1 menampilkan konfigurasi awal dan tanda panah merah menunjukkan peripheral SYS yang perlu diatur ulang dari nilai asalnya. Nilai yang perlu diubah ditampilkan pada Gambar 2.
Agar proses debugging mikrokontroler STM32F103C8T6 dengan OpenOCD dan ST-Link V2 dapat berjalan lancar, pengguna bisa memilih mode debug Serial Wire pada peripheral SYS, sebagaimana pada {1} di Gambar 3.
Setelah melakukan konfigurasi untuk proses debug pada seperti pada Gambar 3, proses dapat dilanjutkan dengan melakkan konfigurasi pada semua bagian lain yang diperlukan. Misalnya dalam mempelajari STM32 menggunakan papan μC STM32F103C8T6 yang murah meriah, pengguna perlu melakukan konfigurasi ulang pada pin PC13. Pin tersebut terhubung dengan satu led berwarna merah yang sangat mudah dijadikan bahan awal belajar maupun sebagai salah satu penanda proses (termasuk untuk debugging). Hasilnya seperti yang terlihat di Gambar 4, sedangkan untuk proses pengerjaannya dapat dibaca pada post sebelumnya di sini.
Gambar 5. Papan sistem μC STM32F103C8T6 yang relatif murah sebagai sarana belajar.
Hasil konfigurasi STM32CubeMX yang berhubungan dengan debugging yang telah diungkapkan dapat dilihat di dalam file stm32f1xx_hal_msp.c seperti yang terlihat di Gambar 6.
Baris kode yang benar yang memungkinkan dilakukannya proses debugging yang telah diatur dengan STM32CubeMX, yang teradapat di file stm32f1xx_hal_msp.c adalah:
__HAL_AFIO_REMAP_SWJ_NOJTAG();
Atau seperti bisa dilihat pada Gambar 7 pada baris ke 75. Baris ke 73 adalah kode yang dihasilkan secara default oleh CubeMX, kode ini akan menghasilkan kesalahan dalam proses debugging dengan menggunakan OpenOCD+ST-Link V2(+GDB). Kode pada baris ke 74 adalah untuk konfigurasi dengan JTAG 4 pin.
// __HAL_AFIO_REMAP_SWJ_DISABLE(); //Kalau JTAG disabled pada STM32CubeMX akan error // __HAL_AFIO_REMAP_SWJ_NONJTRST(); //JTAG 4 __HAL_AFIO_REMAP_SWJ_NOJTAG(); // Serial Wire debug
Gambar 8. [Klik pada gambar untuk memperbesar tampilan]
Gambar 8 menampilkan proses debugging yang benar dengan mempergunakan konfigurasi seperti yang terlihat pada Gambar 7 (debug enabled). Sedangkan pada Gambar 9, terlihat kesalahan yang terjadi jika masih menggunakan kode default: __HAL_AFIO_REMAP_SWJ_DISABLE. Pesan kesalahan dari OpenOCD:
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
Gambar 9. Bukti tampilan kesalahan debugging STM32F103C8 sebagai akibat dari salah konfigurasi pada STM32CubeMX
Video singkat cuplikan contoh stepping pada proses debugging.
[intense_video video_type=”youtube” video_url=”https://www.youtube.com/watch?v=6MtAfxhhEsE”]