Assalamu'alaikum warohmatulohi wabarakatuh,
tunggu wangsit dulu ya...
Assalamu'alaikum warohmatulohi wabarakatuh,
tunggu wangsit dulu ya...
Assalamu'alaikum warohmatulohi wabarakatuh,
tunggu wangsit dulu ya...
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:
| 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.
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:
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.
STM32H743VI. Di daftar akan muncul STM32H743VITx; pilih chip tersebut.H7_Blink. Biarkan Targeted Language = C, lalu klik Finish..ioc akan terbuka.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.
Buka System Core → RCC:
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.
Buka tab Clock Configuration:
Jika ada error merah pada clock tree, klik Resolve Clock Issues dan biarkan CubeMX menyesuaikan pembagi clock.
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.
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.
Sebelum upload pertama, update dulu firmware ST-LINK lewat Help → ST-LINK Upgrade:
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.
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).
STM32CubeProgrammer berguna untuk mem-flash file hasil build tanpa membuka IDE, misalnya saat produksi, atau untuk erase total chip yang bermasalah.
.elf atau .hex dari folder Debug project. Jika memakai file .bin, isi Start address = 0x08000000.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:
0x08000000) yang menginisialisasi QSPI dalam mode memory-mapped, lalu melompat ke 0x90000000.0x90000000..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.
| 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 |
Jika chip tidak bisa connect sama sekali, biasanya karena setting Supply Source salah atau pin SWD dimatikan. Pulihkan dengan cara berikut:
.ioc (SYS Debug = Serial Wire, Supply Source = PWR_LDO_SUPPLY), generate ulang kode, lalu flash kembali.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.
Reset dan Power ON
Pada saat pertama kali modul disambungkan dengan baterai, sistem BG96 harus diberikan input pulsa reset minimal 500mS. Kemudian dilanjutkan dengan input pulsa Powerkey minimal 200mS.
Modem READY
Setelah power up berhasil maka tunggu sampai modem BG96 apakah sudah siap atau belum. Apabila ada balasan dari port serial berupa data karakter ASCII : "RDY", maka modem siap menerima perintah berikutnya.
RDY
Respons AT OK
Kemudian lanjut kirim command melalui port serial data karakter ASCII "AT" dan tunggu sampai dibalas "OK"
AT
OK
Cek Fungsional Modem
AT+CFUN?
+CFUN: 1
OK
Cek SIM Card Status
AT+CPIN?
+CPIN: READY
OK
Cek Jaringan Operator Seluler
Cek EPS Network Registration Status
AT+CEREG/
+CEREG: 0,4
OK
REBOOT Modules Apabila setelah 90 detik nilai CEREG tidak bernilai 1 atau 5
AT+CFUN=1,1
OK
POWERED DOWN
RDY
Disable Result Code - Error Message Format
AT+CMEE=0
OK
Disable Time Zone Reporting of changed Event - Time Zone Reporting
AT+CTZR=0
Enable Automatic Time Zone Update
AT+CTZU=1
OK
Configure Network Category to be Searched under LTE (cat M1, cat NB1, cat M1 & NB1)
AT+QCFG="iotopmode",0,1
OK
Configure RAT(s) to be Searched (Auto , GSM, LTE)
AT+QCFG="nwscanmode",0,1
OK
Configure APN for PDP Context Profile
AT+QICSGP=1,1,"NB1INTERNET","","",0 // APN Telkomsel = NB1INTERNET
OK
Aktivasi PDP Context Profile
Open a TCP connection to the remote server, TCP Client works in buffer access mode
Send Data in Buffer Access Mode
Check the connection state
AT+QISTATE=1,0 //Query the connection status when <connectid> is 0
Receive Data from Remote Server in Buffer Access Mode
+QIURC: “recv”,0 // The <connectID> 0 received data.
AT+QIRD=0,1500 // Read data, and the length is 1500bytes.
+QIRD: 5 // The length of actual received data is 5bytes.
test1
OK
AT+QIRD=0,1500
+QIRD: 0 // No data in buffer.
OK
AT+QIRD=0,0 // Query the total length of received data,
// including read and unreaddata.
+QIRD: 5,5,0
OK
Read the server respons
AT+QIRD=0,0
+QIRD: 0,0,0
OK
Cek Signal Modem
AT+QCSQ
+QCSQ: "GSM",-74
OK
Board BG96 dapat diorder disini:
Arduino menjadi board pertama bagi banyak pengguna mikrokontroller dan pelajar, mahasiswa dan engineer ketika mereka mulai dengan elektronik. Namun, ketika kita mulai membangun lebih banyak dan menggali lebih dalam, kita akan segera menyadari bahwa Arduino belum banyak digunakan untuk industri dan karena merupakan CPU 8-bit maka kinerjanya dinilai kurang cepat. Sedangkan STM32F103C8T6 STM32 Development Board (Blue Pill) baru banyak di pasaran dengan harga yang terjangkau, sehingga banyak sekarang yang menggunakan nya untuk berbagai project yang mana STM32 merupakan CPU 32-bit dan arsitektur ARM Cortex M3. gi bahwa kita dapat menggunakan Arduino IDE yang sama untuk memprogram board STM32 kita.
STM » adalah nama produsen STMicroelectronics
32 » adalah arsitektur ARM 32-bit
F103 » berdiri untuk menunjukkan bahwa arsitektur ARM Cortex M3
C » 48-pin
8 » Memori Flash 64KB
T » jenis paket adalah LQFP
6 » suhu pengoperasian -40 ° C hingga + 85 ° C
Berikut adalah spesifikasi Microcontroller ini :
STM32 merupakan mikrokontroler dari keluarga STMicroelectronics. Jadi semua metode yang ada untuk memprogram chip ARM dapat digunakan untuk papan STM32 juga. Salah satu IDE terkenal dan umum digunakan adalah Keil ARM MDK dan selain itu kita juga dapat menggunakan IAR, Atollic TrueStudio, MicroC Pro ARM, ARM Crossworks, Ride 7, PlatformIO + STM32 dll.
Namun yang membuat board ini sangat populer adalah kemampuannya untuk diprogram dengan Arduino IDE. Dengan cara ini orang dapat memulai dan membangun proyek dengan STM32 dalam waktu singkat karena banyak yang sudah terbiasa dengan Arduino IDE dan bahasa pemrograman yang mudah digunakan dan banyak dukungan library yang tersedia. Untuk itu dalam tutorial ini kita akan menggunakan IDE Arduino untuk memulai dengan STM32.
Kelebihan dari download program menggunakan pin JTAG di STM32 adalah user tidak perlu merubah setting boot mode pada pin boot0 dan boot1 di STM32 seperti pada saat download program menggunakan port serial di STM32. Jadi user tidak perlu menyediakan dan merubah jumper switch boot0 dan boot1 pada saat download program ataupun pada saat running program. Kedua pin boot0 dan boot1 disetting terhubung ke ground.
Untuk memprogram papan STM32 langsung dari Arduino IDE kita menggunakan pin programming JTAG yang tersedia oleh STM32 yaitu pin SWDIO (PA13) dan pin SWCLK (PA14). Modul JTAG programmer / downloader STLINK V2 dihubungkan dengan pin SWDIO (PA13) dan pin SWCLK (PA14) dari STM32 seperti yang ditunjukkan di bawah ini.
Pin VCC dari STLINK V2 dipilih menyesuaikan dengan power VCC dari STM32 yaitu 3.2V. Ground terhubung ke ground STM32. Pin SWDIO dan SWCLK pada modul STLINK V2 masing-masing terhubung ke pin PA13 dan PA14 dari STM32. Modul JTAG programmer / downloader STLINK V2 yang bisa digunakan adalah seperti pada gambar dibawah ini.
Ikuti langkah-langkah di bawah ini untuk mengunduh dan menyiapkan Arduino IDE untuk digunakan dengan board STM32.
Langkah 1: – Jika Anda belum menginstal Arduino IDE, unduh dan instal dari tautan ini. Pastikan Anda memilih sistem operasi yang benar.
Langkah 2: – Setelah Menginstal Arduino IDE buka dan unduh paket yang diperlukan untuk papan STM32. Ini dapat dilakukan dengan memilih File -> Preferences.
Langkah 3: – Mengklik Preferensi akan membuka kotak dialog yang ditunjukkan di bawah ini. Di kotak teks URL Boards Manager tambahan tempel tautan di bawah ini :
dan tekan OK.

Langkah 4: – Sekarang pergi ke Tools -> Board -> Board Manajer. Ini akan membuka kotak dialog Boards manager, mencari “STM32 Cores” dan menginstal paket yang muncul.
Langkah 5: – Setelah paket instalasi selesai. Pergi ke Tools dan geser ke bawah untuk menemukan seri Generic STM32F103C seperti yang ditunjukkan di bawah ini. Kemudian pastikan variannya adalah tipe 64kFlash, kecepatan CPU adalah 72MHz dan ubah metode upload ke "STM32CubeProgrammer (SWD)" .

Langkah 6: – Untuk upload / download program menggunakan JTAG STLINK V2, user harus mendownload STM32CubeProgrammer di tautan link di bawah ini:
Apabila link diatas tidak bisa diakses, bisa download di link google drive dibawah ini:
Langkah 7: – Setelah semua perubahan dilakukan, dan STM32CubeProgrammer telah diinstall. Pada Arduino IDE klik tombol upload untuk menguji program Blink test ke board STM32. apabila proses upload berhasil akan muncul status seperti gambar di bawah ini:
Output dari hall effect sensor ini adalah pulsa.
Pada jarum pointer x0.001 meteran air analog telah ditempelkan magnet permanen bulat kecil agar bisa terbaca oleh sensor hall effect apabila melewatinya. Gambar dibawah ini adalah penempatan magnet pada jarum pointer x0.001 meteran air.
Setiap jarum pointer x0.001 melewati sensor 1kali putaran, ini menunjukkan bahwa debit air yang melewati meteran adalah senilai 1 x 0.001 meter kubik.
Sensor hall effect dipasangkan 2 buah dengan posisi melingkar sisi kiri dan kanan diatas jarum pointer x0.001 meteran air analog, silahkan cek gambar dibawa ini untuk detail pemasangan sensornya.
Dengan adanya dua sensor ini akan terbaca kondisi saat jarum pointer (magnet) masuk melewati sensor 1 dan kemudian keluar melewati sensor 2. Ini menunjukkan bahwa arah putaran jarum pointer adalah searah jarum jam. Apabila arah putaran jarum pointer berlawanan arah jarum jam, maka sensor akan terbaca pertama masuk melewati sensor 2 kemudian keluar melewati sensor 1.
Modul ini bisa dibeli pada link tokopedia dibawah ini: