Melakukan Debugging pada Blue Pill (STM32F103C8) di VSCode
Pada artikel sebelumnya kita sudah berhasil untuk melakukan setup Blue Pill (STM32F103C8) dengan Rust di Linux. Terkadang dalam memprogram STM32F103C8, kita menemukan masalah pada saat program dijalankan, seperti program berjalan tidak sesuai dengan logika yang tetapkan. Sehingga kita perlu untuk melihat nilai variabel atau register saat program dijalankan untuk mencari sumber masalah. Untuk memperbaiki masalah tersebut kita perlu melakukan proses debug. Pada kesempatan ini kita belajar cara mempersiapkan VSCode untuk melakukan debug pada Blue Pill (STM32F103C8).
Persiapan
Untuk melakukan debug pada Blue Pill (STM32F103C8) kita perlu menginstall beberapa software tambahan seperti debugger, GDB Server, dan ekstensi VSCode.
Instalasi Debugger di Linux
Debugger merupakan program yang digunakan untuk melakukan debugging. Karena kami disini menggunakan distro linux Fedora, kami akan menggunakan GNU Debuger. Jika anda menggunakan distro yang lain anda mungkin perlu menginstall arm-none-eabi-gdb, silakan sesuaikan instalasinya sesuai dengan distro yang anda gunakan. Untuk menginstall GNU Debuger di Fedora bisa menggunakan perintah berikut:
sudo dnf install gdbInstalasi Ekstensi VSCode untuk Debugger
Ekstensi ini berfungsi untuk membantu kita dalam melakukan debug pada Blue Pill (STM32F103C8). Ekstensi akan otomatis menjalankan debugger, GDB server, serta menampilkan variable, register, breakpoint, dan lain-lain di VSCode. Kita akan menggunakan ekstensi Cortex-Debug. Untuk menginstall ekstensi tersebut, pada VSCode tekan CTRL+P, pada text entry yang muncul masukkan perintah berikut lalu tekan ENTER:
ext install marus25.cortex-debugInstalasi GDB Server
GDB Server merupakan program yang berfungsi untuk menghubungkan program debugger ke mikrokontroler. Sesuai dengan artikel sebelumnya, dimana kita menggunakan ST-Link USB Downloader Debuger maka kita akan menggunakan stlink sebagai GDB Server. Berikut merupakan perintah untuk menginstall stlink di Fedora, jika anda menggunakan distro yang lain anda bisa menyesuaikan proses penginstalannya:
sudo dnf install stlinkCatatan: Kita juga bisa menggunakan
OpenOCDsebagai GDB server.OpenOCDjustru mendukung lebih banyak perangkat selain ST-Link seperti J-Link, CMSIS-DAP, dan lain-lain.
File System View Description (SVD) untuk STM32F103C8
Selain software kita juga perlu file SVD untuk mikrokontroler STM32F103C8 yang akan digunakan oleh debugger. File SVD berisikan struktur internal dari mikrokontroler STM32F103C8, sehingga debugger bisa membaca register mikrokontroler tersebut. Untuk file SVD mikrokontroler STM32F103C8 dapa diunduh di halaman ini. Pilih file ‘en.stm32f1_svd.zip ‘. Jika anda menggunakan mikrokontroler yang lain silakan sesuaikan file yang didownload.
SVD adalah file XML yang mendeskripsikan register periferal, alamat memorinya, serta bit-bit individual pada mikrokontroler.
Debugging Blue Pill (STM32F103C8) di VSCode
Sebelum dapat melakukan debugging, kita harus melakukan setup konfigurasi pada project di VSCode seperti membuat file launch.json dan task.json.
Setup Project untuk Debugging Blue Pill (STM32F103C8)
Pertama buka project Rust kita di VSCode. Lalu klik tab ‘Run and Debug’ di sebelah kiri, klik pada ‘create a launch.json file’. Pada popup yang muncul pilih ‘Cortex Debug’, maka otomatis akan membuat file .vscode/launch.json. Buka file tersebut lalu ubah seperti berikut:
1{
2 "version": "0.2.0",
3 "configurations": [
4 {
5 "name": "Rust Debug",
6 "type": "cortex-debug",
7 "request": "launch",
8 "cwd": "${workspaceFolder}",
9 "executable": "./target/thumbv7m-none-eabi/debug/single-conversion-poll", // binary Anda
10 "servertype": "stlink", // tipw GDB server
11 "toolchainPrefix": "arm-none-eabi",
12 "gdbPath": "gdb",
13 "preLaunchTask": "cargo build", // Memastikan build sebelum flash
14 "runToEntryPoint": "main",
15 "svdFile": "${workspaceFolder}/STM32F103.svd" // File SVD
16 }
17 ]
18}Poin-poin penting:
- ‘name’: Nama konfigurasi. Silakan sesuaikan dengan keinginan anda.
- ‘executable’: Binary yang akan di flash ke Blue Pill (STM32F103C8). Silakan sesuaikan file binary anda.
- ‘gdbPath’: Path dari debugger. Jika anda menggunakan debugger ‘
arm-none-eabi-gdb’ anda dapat menghapus baris ini atau menggantinya dengan ‘arm-none-eabi-gdb’. - ‘servertype’: tipe GDB Server yang digunakan. Karena kita disini menggunakan stlink, maka kita isi dengan
stlink. Jika anda menggunakan GDB Server yang lain (openocd) silakan sesuaikan. - ‘preLaunchtask’: Task yang akan dikerjakan sebelum melakukan debugger. Disini kita mengatur ke task ‘
cargo build’, agar sebelum program dijalankan otomatis membuild project rust. - ‘svdFile’: Path tempat file SVD ditaruh.
Selanjutnya buat task baru bernama ‘cargo build’ sesuai dengan preLaunchTask di file .vscode/launch.json: Klik menu ‘Terminal’, lalu pilih ‘Configure Task’. Di menu pop up yang muncul pilih ‘rust: cargo build’, file .vscode/tasks.json akan otomatis dibuat. Buka file tersebut lalu ubah seperti berikut:
1{
2 "version": "2.0.0",
3 "tasks": [
4 {
5 "type": "cargo",
6 "command": "build",
7 "problemMatcher": [
8 "$rustc"
9 ],
10 "group": "build",
11 "label": "cargo build"
12 }
13 ]
14}Pastikan isi ‘label’ sama dengan isi ‘preLaunchtask’ pada file .vscode/launch.json.
Proses Debugging Blue Pill (STM32F103C8)
Untuk memulai proses debugging, pada VSCode pilih tab ‘Run and Debug’ di sebelah kiri, lalu klik tombol ‘Run and Debug’ atau bisa juga dengan menekan tombol keyboard F5. Tampilan VSCode akan otomatis berubah ke tampilan debugging seperti berikut:

Pada bagian sebelah kiri (sidebar kiri) kita dapat melihat nilai variabel, call stack, dan nilai register dari mikrokontroler STM32F103C8.

Berikut merupakan fungsi beberapa menu pada sidebar saat debugging di VSCode:
- VARIABLES: Menampilkan daftar nama dan nilai variabel static dan local.
- Call Stack: Menampilkan urutan daftar fungsi (method) yang dipanggil.
- Registers: Menampilkan daftar nama dan nilai register baik register periferal maupun register CPU ARM Cortex-M3.
Pro Tip: Shortcut penting saat proses debugging:
- F5: Melanjutkan menjalankan program dari break poin.
- F10: Menjalankan baris perintah berikutnya.
- F11: Masuk ke fungsi baris sekarang dan menjalankan baris perintah pertama di dalam fungsi tersebut.
- SHIFT+F11: Keluar dari fugsi sekarang dan kembali ke fungsi pemanggilnya.
- CTRL+SHIFT+F5: Merestart program kembali dari awal.
- SHIFT+F5: Menghentikan proses debugging.
Contoh source code dapat diakses di repositori Github.
Jika anda mengalami kendala, atau ingin menyampaikan kritik dan saran, silakan hubungi kami melalui halaman kontak.