Assalamu'alaikum warohmatullahi wabarakatuh,
Pada tulisan kali ini saya akan berbagi cara memprogram mikrokontroler STM32H7 series, khususnya STM32H743 dan STM32H750, menggunakan STM32CubeIDE dan downloader WeAct ST-Link V2.1 lewat jalur SWD (Serial Wire Debug). Modul ini kompatibel dengan ST-LINK V2, murah, dan sudah dilengkapi USB-UART, sehingga cocok untuk belajar. ST-LINK V2 original maupun clone juga tetap bisa dipakai dengan langkah yang sama.
STM32H7 adalah keluarga ARM Cortex-M7 yang sangat kencang. STM32H743 bisa berjalan sampai 480 MHz dengan flash internal 2 MB, sedangkan STM32H750 adalah versi "value line" dengan core yang sama tetapi flash internal hanya 128 KB. Namun, H7 punya beberapa jebakan yang tidak ada di seri F1 atau F4, terutama soal konfigurasi power supply. Kalau salah setting, chip bisa terlihat seperti "mati" setelah di-flash.
Pada tutorial ini saya menggunakan core board DevEBox STM32H7XX_M buatan mcudev (Ver V2.0) dengan chip STM32H743VIT6: kemasan LQFP100, flash internal 2 MB, RAM 1 MB, dan kecepatan maksimal 480 MHz. Board ini juga dilengkapi kristal 25 MHz dan 32,768 kHz, QSPI flash W25Q64 (8 MB), slot microSD, konektor kamera DCMI, header LCD/OLED SPI, tombol RST/K1/K2, serta LED user D2. Dengan flash internal 2 MB, program bisa langsung disimpan di flash internal tanpa perlu QSPI eksternal.
Tampak depan board DevEBox STM32H7XX_M. Header SWD (J1) ada di sebelah port USB.
Yang akan dibahas:
- Alat dan bahan
- Wiring ST-LINK ke board STM32H7
- Membuat project dan konfigurasi di STM32CubeIDE
- Program sederhana: LED berkedip (blink)
- Upload dan debug dari STM32CubeIDE
- Upload menggunakan STM32CubeProgrammer
- Catatan khusus STM32H750
- Troubleshooting masalah yang sering muncul
1. Alat dan Bahan
| Item | Keterangan |
| Board STM32H7 | DevEBox STM32H7XX_M (mcudev) dengan STM32H743VIT6; versi STM32H750VBT6 juga tersedia |
| Downloader ST-LINK | Saya memakai WeAct ST-Link V2.1 (Mini Debugger): port USB-C, SWD, dan USB-UART (virtual COM port) dalam satu modul. ST-LINK V2 original atau clone juga bisa dipakai |
| Kabel jumper female–female | Minimal 4 kabel untuk SWD, ditambah 2–3 kabel jika memakai UART |
| Kabel USB | USB-C untuk debugger, dan kabel micro USB untuk board jika board diberi daya sendiri |
| STM32CubeIDE | IDE gratis dari ST, sudah termasuk STM32CubeMX dan driver ST-LINK |
| STM32CubeProgrammer | Untuk flash file .hex/.bin/.elf dan erase chip |
Pastikan driver ST-LINK sudah terpasang. Biasanya driver ikut terpasang bersama STM32CubeIDE. Jika belum, cari paket "STSW-LINK009" di situs ST.
2. Wiring ST-LINK ke STM32H7 (SWD)
SWD hanya butuh dua jalur data, yaitu SWDIO dan SWCLK, ditambah GND. Pada STM32H7, kedua pin tersebut ada di PA13 dan PA14.
Sebagai downloader saya memakai WeAct ST-Link V2.1. Modul ini kompatibel dengan ST-LINK V2, tetapi memakai firmware ST-LINK V2-1 yang menambahkan USB-UART (virtual COM port). Jadi selain untuk flash dan debug lewat SWD, modul yang sama bisa dipakai untuk melihat output printf dari board tanpa USB-TTL tambahan. Modul ini bernama Mini Debugger V1.0 dari WeAct Studio, dengan konektor 10 pin yang labelnya tercetak di bagian belakang PCB.
Modul WeAct ST-Link V2.1: port USB-C di satu sisi, konektor kabel untuk jalur SWD dan UART di sisi lain.
Label pin WeAct Mini Debugger V1.0 di bagian belakang PCB.
| Kelompok | Pin (urut dari atas) |
| SWD | 3V3, SWDIO, SWCLK, GND, SWO, NRST |
| UART | TXD, RXD, GND, 5V |
Pin SWO dan 5V tidak dipakai di tutorial ini. Pin NRST bisa disambung ke pin NRST board jika tersedia; header J1 di board DevEBox tidak menyediakannya.
Board DevEBox sudah menyediakan header SWD 5 pin (J1) di sebelah port micro USB, dengan label BT0, 3V3, GND, DIO, CLK. Sambungkan seperti tabel berikut:
| Pin WeAct Mini Debugger | Pin header J1 board | Pin STM32H7 | Keterangan |
| SWDIO | DIO | PA13 | Jalur data dua arah |
| SWCLK | CLK | PA14 | Clock dari ST-LINK |
| GND | GND | GND | Wajib tersambung |
| 3V3 | 3V3 | 3V3 | Opsional; jangan disambung jika board sudah diberi daya dari micro USB |
| (tidak disambung) | BT0 | BOOT0 | Normalnya dibiarkan; BOOT0 sudah ditarik ke GND lewat resistor di board |
Ilustrasi wiring WeAct ST-Link V2.1 ke DevEBox STM32H7XX_M: jalur SWD ke header J1 dan jalur UART ke PA9/PA10.
Header J1 tidak memiliki pin NRST. Jika butuh mode connect under reset, gunakan tombol RST di board (lihat bagian 5 dan 8).
Tampak belakang board: label header SWD terbaca SWCLK, SWDIO, GND, 3V3, BT0, beserta nama pin I/O di kedua sisi board.
Beberapa tips:
- Selalu ikuti label pin yang tercetak di debugger dan board. Urutan pin antar merk ST-LINK bisa berbeda.
- Gunakan kabel jumper pendek (di bawah 20 cm). Kabel panjang sering membuat koneksi SWD gagal di frekuensi tinggi.
- Jika board diberi daya dari micro USB, cukup sambungkan SWDIO, SWCLK, dan GND.
Bonus: sambungan UART untuk printf
Karena WeAct ST-Link V2.1 punya USB-UART, sambungkan juga kabel berikut ke USART1 board DevEBox:
| Pin WeAct Mini Debugger | Pin board DevEBox | Keterangan |
| TXD | PA10 (RX1) | Data dari PC ke STM32 |
| RXD | PA9 (TX1) | Data dari STM32 ke PC |
| GND | GND | Cukup satu GND jika GND SWD sudah tersambung |
TX selalu disilang ke RX. Di PC, modul ini muncul sebagai port COM bernama STMicroelectronics STLink Virtual COM Port. Buka dengan terminal serial (PuTTY, Tera Term, atau terminal bawaan CubeIDE) pada baud rate yang sama dengan setting USART1, misalnya 115200.
3. Membuat Project di STM32CubeIDE
3.1 Project baru
- Buka STM32CubeIDE, lalu pilih File → New → STM32 Project.
- Di tab MCU/MPU Selector, ketik
STM32H743VI. Di daftar akan muncul STM32H743VITx; pilih chip tersebut.
- Beri nama project, misalnya
H7_Blink. Biarkan Targeted Language = C, lalu klik Finish.
- Jika muncul pertanyaan untuk membuka perspektif Device Configuration Tool, pilih Yes. File
.ioc akan terbuka.
3.2 SYS: aktifkan Serial Wire (wajib)
Buka System Core → SYS, lalu set Debug = Serial Wire.
Ini langkah paling penting. Jika dibiarkan "No Debug", pin PA13 dan PA14 bisa terpakai untuk fungsi lain. Akibatnya, setelah program pertama di-flash, ST-LINK tidak bisa lagi terhubung secara normal.
3.3 RCC: sumber clock dan power supply
Buka System Core → RCC:
- High Speed Clock (HSE): pilih Crystal/Ceramic Resonator. Board DevEBox memakai kristal 25 MHz untuk HSE. Jika butuh RTC, set juga Low Speed Clock (LSE) ke Crystal, karena board ini punya kristal 32,768 kHz.
- Di bagian Parameter Settings → Power Parameters, cari Supply Source dan pilih PWR_LDO_SUPPLY.
Setting Supply Source harus sesuai dengan rangkaian hardware board. Board DevEBox memakai regulator AMS1117-3.3V dan tidak memakai SMPS internal chip, jadi pilih PWR_LDO_SUPPLY. Jika setting ini tidak cocok dengan hardware, chip akan hang saat inisialisasi dan ST-LINK tidak bisa connect. Cara memulihkannya ada di bagian Troubleshooting.
3.4 Clock Configuration
Buka tab Clock Configuration:
- Pilih HSE sebagai sumber PLL, lalu isi frekuensi kristal 25 MHz.
- Untuk percobaan awal, set SYSCLK = 400 MHz. Nilai ini aman untuk semua revisi chip.
- STM32H743 revisi V bisa sampai 480 MHz, tetapi harus memakai voltage scale VOS0. Revisi Y (chip lama) maksimal 400 MHz.
Jika ada error merah pada clock tree, klik Resolve Clock Issues dan biarkan CubeMX menyesuaikan pembagi clock.
3.5 GPIO untuk LED
Pada board DevEBox, LED user D2 tersambung ke pin PA1 dan bersifat active low: LED menyala saat pin bernilai LOW. Klik pin PA1 pada tampilan chip, set sebagai GPIO_Output, lalu beri label LED lewat klik kanan → Enter User Label agar kodenya lebih mudah dibaca. Agar LED mati saat awal, buka System Core → GPIO → PA1 dan set GPIO output level = High.
Tombol K1 ada di PE3 dan K2 di PC5 (keduanya active low), bisa dipakai untuk percobaan input berikutnya.
Simpan file .ioc dengan Ctrl+S. CubeIDE akan menanyakan apakah kode ingin di-generate; pilih Yes.
4. Program Sederhana: LED Berkedip
Buka file Core/Src/main.c. Tulis kode hanya di antara komentar USER CODE BEGIN dan USER CODE END, supaya tidak terhapus saat kode di-generate ulang dari .ioc.
Cari loop while (1) di fungsi main(), lalu isi seperti berikut:
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
LED_GPIO_Port dan LED_Pin otomatis dibuat oleh CubeMX dari user label LED pada langkah 3.5. Jika tidak memberi label, gunakan langsung GPIOA dan GPIO_PIN_1. Karena LED bersifat active low, HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET) akan menyalakan LED dan GPIO_PIN_SET mematikannya.
Klik ikon palu (Build) atau tekan Ctrl+B. Pastikan Console menampilkan 0 errors. Hasil build berupa file H7_Blink.elf di folder Debug.
5. Upload dan Debug dari STM32CubeIDE
5.1 Update firmware ST-LINK
Sebelum upload pertama, update dulu firmware ST-LINK lewat Help → ST-LINK Upgrade:
- Colokkan ST-LINK ke USB, lalu klik Open in update mode.
- Klik Upgrade dan tunggu sampai selesai.
Firmware lama sering tidak mengenali seri H7. WeAct ST-Link V2.1 akan terdeteksi sebagai STLink V2-1 dan bisa di-update lewat menu yang sama. Jika modul ternyata berisi firmware DAPLink (WeAct juga menjual versi ini), di CubeIDE pilih debug probe OpenOCD dengan interface CMSIS-DAP, atau isi ulang firmware ST-LINK sesuai petunjuk WeAct.
5.2 Debug Configuration
Klik kanan project, lalu pilih Debug As → Debug Configurations. Klik dua kali STM32 C/C++ Application untuk membuat konfigurasi baru, lalu buka tab Debugger:
| Opsi | Nilai yang disarankan |
| Debug probe | ST-LINK (ST-LINK GDB server) |
| Interface | SWD |
| Frequency | 4000 kHz; turunkan ke 1000 kHz atau lebih kecil jika koneksi gagal atau kabel panjang |
| Reset behaviour | Software system reset (header J1 tidak punya NRST); Connect under reset hanya jika NRST disambung |
Klik Apply, lalu Debug. CubeIDE akan mem-flash program, pindah ke perspektif Debug, dan berhenti di awal main(). Tekan F8 (Resume) dan LED akan berkedip setiap 500 ms.
Untuk upload tanpa masuk mode debug, gunakan Run As → STM32 C/C++ Application, atau klik ikon Run (play hijau).
6. Upload Menggunakan STM32CubeProgrammer (SWD)
STM32CubeProgrammer berguna untuk mem-flash file hasil build tanpa membuka IDE, misalnya saat produksi, atau untuk erase total chip yang bermasalah.
- Buka STM32CubeProgrammer. Di panel kanan, pilih ST-LINK.
- Atur parameter koneksi:
- Port: SWD
- Frequency: 4000 kHz (turunkan bila gagal)
- Mode: Normal, atau Under reset jika NRST disambung
- Klik Connect. Jika berhasil, isi memori dan informasi chip (Device ID, ukuran flash) akan tampil.
- Buka menu Erasing & Programming (ikon panah ke bawah di sidebar kiri).
- Pada File path, pilih file
.elf atau .hex dari folder Debug project. Jika memakai file .bin, isi Start address = 0x08000000.
- Centang Verify programming dan Run after programming, lalu klik Start Programming.
- Setelah muncul "File download complete", klik Disconnect. Program langsung berjalan.
7. Catatan Khusus STM32H750
Karena STM32H743VIT6 sudah memiliki flash internal 2 MB, bagian ini tidak diperlukan untuk board yang saya pakai. Catatan berikut hanya untuk pembaca yang memakai STM32H750.
STM32H750 hanya memiliki 128 KB flash internal, satu sektor saja. Untuk program kecil seperti blink, langkah di atas berlaku sama persis dengan H743.
Masalah muncul ketika program membesar, misalnya saat memakai FreeRTOS, LwIP, atau library grafis. Solusinya adalah menyimpan program di QSPI flash eksternal (W25Q64 8 MB juga tersedia pada board DevEBox versi H750) dan menjalankannya dari alamat 0x90000000 (XIP, execute in place). Skemanya:
- Bootloader kecil di flash internal (
0x08000000) yang menginisialisasi QSPI dalam mode memory-mapped, lalu melompat ke 0x90000000.
- Aplikasi utama dengan linker script yang diubah supaya region FLASH berada di
0x90000000.
- External Loader (file
.stldr) supaya ST-LINK bisa menulis ke QSPI flash. File ini didaftarkan di STM32CubeProgrammer (menu EL) dan di CubeIDE (Debug Configurations → Debugger → External Loaders).
Pembahasan lengkapnya akan saya tulis di artikel terpisah.
8. Troubleshooting
| Gejala | Kemungkinan penyebab | Solusi |
| "No STM32 target found" | Wiring salah atau longgar, GND tidak tersambung, board tidak mendapat daya | Cek ulang SWDIO/SWCLK/GND, pastikan board menyala, gunakan kabel pendek |
| "Target is not responding, retrying..." | Frekuensi SWD terlalu tinggi, atau pin SWD dimatikan oleh program | Turunkan frekuensi ke 1000 kHz atau lebih kecil; tahan tombol RST saat klik Connect |
| Bisa flash sekali, setelah itu tidak bisa connect lagi | SYS Debug masih "No Debug", atau Supply Source (LDO/SMPS) salah | Pulihkan chip dengan BOOT0 (lihat di bawah), lalu perbaiki .ioc |
| ST-LINK tidak terdeteksi oleh PC | Driver belum terpasang | Install driver STSW-LINK009, coba port USB lain |
| "ST-LINK firmware is too old" | Firmware ST-LINK lama | Update lewat Help → ST-LINK Upgrade |
| Program H750 gagal di-link ("region FLASH overflowed") | Ukuran program melebihi 128 KB | Optimasi ukuran (-Os) atau pindahkan program ke QSPI |
Memulihkan chip yang "terkunci"
Jika chip tidak bisa connect sama sekali, biasanya karena setting Supply Source salah atau pin SWD dimatikan. Pulihkan dengan cara berikut:
- Sambungkan pin BT0 ke 3V3 pada header J1 menggunakan kabel jumper.
- Matikan lalu nyalakan lagi board. Chip sekarang masuk ke bootloader sistem, sehingga program yang bermasalah tidak dijalankan.
- Di STM32CubeProgrammer, connect dengan mode Under reset atau Hot plug.
- Klik Full chip erase (ikon penghapus di sidebar kiri).
- Lepaskan jumper BT0 (kembali ke GND), lalu matikan dan nyalakan board.
- Perbaiki setting di
.ioc (SYS Debug = Serial Wire, Supply Source = PWR_LDO_SUPPLY), generate ulang kode, lalu flash kembali.
Penutup
Memprogram STM32H7 dengan ST-LINK sebenarnya tidak jauh berbeda dengan seri STM32 lain. Kuncinya ada di tiga hal: aktifkan SYS Debug = Serial Wire, pastikan Supply Source sesuai hardware board, dan manfaatkan pin BT0 di header SWD untuk memulihkan chip yang terkunci. Untuk STM32H750, perhatikan batas flash internal 128 KB sejak awal perencanaan program.
Pada artikel berikutnya, kita akan membahas implementasi FreeRTOS pada STM32H7 series.
Semoga bermanfaat. Jika ada pertanyaan, silakan tulis di kolom komentar.
Wassalamu'alaikum warohmatullahi wabarakatuh.