Penggunaan Eclipse Neon sebagai IDE untuk mikrokontroler STM32

neon01

Tulisan ini masih dalam rangka babat alas. Menurut cerita zaman dahulu, awal dari pembangunan sebuah desa adalah dengan menebang pepohonan di sebuah hutan. Baru kemudian desa dibangun bertahap. Filosofi yang sama yang saya anut dalam tinkering mikrokontroler dengan arsitektur ARM Cortex seperti Tiva C maupun keluarga STM32. Tahap pertama adalah mencoba memastikan sistem perangkat keras berfungsi baik, setidaknya untuk fungsi dasar yang relatif mudah untuk diperiksa. Seiring dengan itu saya mengatur perangkat lunak yang diperlukan untuk kelak bekerja dengan perangkat keras yang ada. Termasuk dalam tahap ini adalah kegiatan mencoba-coba software untuk bisa melakukan evaluasi singkat (awal) mengenai kesesuaiannya untuk dipergunakan.

Jika pada beberapa post sebelumnya saya mengungkapkan penggunaan IDE SW4STM32, maka kali ini saya mencoba pendekatan yang lain. Sekalipun masih menggunakan dasar Eclipse IDE tetapi kali ini instalasi plugin untuk bekerja dengan ARM dilakukan secara manual. Yang saya pergunakan adalah Eclipse Neon, yang instalasi yang sama juga saya pakai untuk pemrograman MSP430 dan Atmel AVR. Jadi satu instalasi IDE untuk tiga jenis arsitektur mikrokontroler.

neon02Gambar 1. [Klik pada gambar untuk memperbesar tampilan]

Situs utama sumber program dan panduan instalasi untuk pengaturan ini berasal dari: http://gnuarmeclipse.github.io/.

neon04Gambar 2. [Klik pada gambar untuk memperbesar tampilan]

neon03Gambar 3. [Klik pada gambar untuk memperbesar tampilan]

Ikuti panduan instalasi di link ini (berlaku juga untuk Eclipse Neon): http://gnuarmeclipse.github.io/plugins/install/ . Panduan singkat di bawah ini terutama sekali mengacu pada tutorial di halaman ini >> http://gnuarmeclipse.github.io/tutorials/blinky-arm/ . Perbedaannya adalah bahwa pada panduan ini saya menyesuaikannya untuk sistem microcontroller board STM32F103C8T6.

Sebelum melanjutkan tahapan proses pembuatan program C++ untuk ARM Cortex yang baru ada beberapa paket yang perlu diinstalasi terlebih dahulu. Tutorial yang lengkap mengenai hal ini dapat dibaca di: http://gnuarmeclipse.github.io/plugins/packs-manager/.  Gambar 4a memperlihatkan Packs perpective.

neon20Gambar 4a. [Klik gambar untuk memperbesar].

Setelah paket-paket yang diperlukan terinstal dengan baik seperti di Gambar 4a, maka pengguna dapat mulai membuat program contoh led berkedip seperti di Gambar 4b.

neon05Gambar 4b. Pembuatan programC++, pilih File >> Project.

neon06Gambar 5.

neon07Gambar 6.

neon08Gambar 7.

neon09Gambar 8.

neon10Gambar 9.

Pada Gambar 9, pada Toolchain path saya mengisinya dengan nama direktori gccarmbin. Ini adalah penamaan direktori bebas yang saya lakukan, tidak menjadi masalah. Yang terpenting adalah ini di dalam direktori tersebut. Compiler dan bagian dari toolchain lainnya dapat diperoleh dari: https://launchpad.net/gcc-arm-embedded. File yang terkompres dari situs bisa diekstrak kedalam sebuah direktori. Sebagai contoh saya meletakkannya di dalam direktori gccarmbin.

neon11Gambar 10. Pilih Window>>Preferences>>OpenOCD.

Jalankan terlebih dahulu perintah Build untuk menghasilkan file *.elf. Kemudian pilih  tanda panah kecil ke bawah di sampirg gambar bug (kutu) pada toolbar, kemudian pilih “Debug Configurations” seperti pada Gambar 11.

neon12Gambar 11.

neon13Gambar 12. Isikan letak file .elf melalui {1}.

neon15Gambar 13. [Klik gambar untuk memperbesar].

Perhatikan nomor port untuk GDB dan Telnet. Untuk isian “Config options”, mengacu pada letak file konfigurasi OpenOCD untuk menggunaan ST-LINK. Sengaja saya taruh di direktori lain agar lebih sulit untuk terhapus. Penamaan file bebas dan isinya sebagai berikut:

# This is an STM32F103C8sunu001 board with a single STM32F103C8Tx chip.
# Generated by System Workbench for STM32

source [find interface/stlink-v2.cfg]
set WORKAREASIZE 0x5000
transport select "hla_swd"
source [find target/stm32f1x.cfg]

# use hardware reset, connect under reset
#reset_config srst_only srst_nogate
#reset_config none
reset_config srst_nogate

neon16Gambar 14.

neon17Gambar 15.

neon18Gambar 16.  Pengawalan proses debugging berhasil.
[Klik gambar untuk memperbesar tampilan.]

Di Gambar 16 dapat dilihat proses pengawalan debugging berhasil dilakukan. Untuk konfigurasi ini saya tidak perlu mempergunakan OpenOCD di terminal eksternal. Setelah proses debugging dengan melakukan klik pada icon bug di toolbar OpenOCD akan dipanggil dan diaktifkan secara otomatis (Gambar 16).

neon19Gambar 17. Debug perspective [klik gambar untuk memperbesar tampilan].

neon21Gambar 18. Untuk debugging dan programming menggunakan papan μC STM32F103C8T6 dengan indikator led PC13, ganti pin number.

Untuk memanfaatkan peripherals registers view pengguna dapat membaca dan mengikuti petunjuk pada: http://gnuarmeclipse.github.io/debug/peripheral-registers/.

Sedangkan untuk cara menghapus isi program dan melakukan pemrograman ulang mikrokontroler dengan menggunakan fasilitas external tools sama dengan pengaturan untuk SW4STM32, keduanya berbasis Eclipse, dan telah diungkapkan di sini.

Kalau diperhatikan, cara menulis program di sini agak berbebeda dengan cara memanfaatkan HAL yang dimanfaatkan lewat STM32CubeMX. Wawasan singkat dan tutorial mengenai ini dapat dipelajari di sini: Build STM32 applications with Eclipse, GCC and STM32Cube.

 

Mbed, kompilasi online program STM32F103C8T6

Pada post yang lalu, telah saya sampaikan catatan untuk melakukan pengujian cepat papan mikrokontroler STM32F103C8T6 (arsitektur ARM Cortex-M3 32-bit RISC) murah produksi China. Dalam post ini saya masih akan menyampaikan cara memprogram STM32F103C8T6 tetapi dengan menggunakan aplikasi online dari mbed. Sebagaimana cara lainnya, cara ini tentu saja memiliki keunggulan dan juga kekurangan. Mungkin perlu semacam studi kecil-kecilan untuk hal ini.

Beberapa keunggulan yang ditawarkan oleh sarana pemrograman online seperti mbed antara lain adalah mempersingkat waktu untuk konfigurasi. Sekalipun sepintas melakukan instalasi dan konfigurasi toolchain secara offline di komputer lokal itu mudah, tetapi kenyataannya sering tidak seperti itu. Beberapa ketidaksesuaian dan kekurangan dalam konfigurasi sangat mungkin terjadi. Seperti yang juga pernah saya alami dan sudah saya catatkan di tinker.sunupradana.info ini. Selain itu jika compiler dan IDE (singkatnya toolchain) diatur dan dipelihara terus menerus oleh pihak yang lebih profesional maka akan lebih terjamin jika ada kondisi error atau terdapat bug,menjadi  akan lebih mungkin dan lebih mudah diperbaiki oleh pengelola. Selain itu dengan jumlah pengguna yang besar, tiap permasalahan akan sangat mungkin dialami oleh banyak orang pada kurun waktu yang sama. Sehingga deteksi kesalahan lebih cepat terjadi. Faktor dimungkinkannya kolaborasi ini juga menjadi salah satu nilai plus platform seperti ini. Kode dari seorang pengguna bisa dimanfaatkan oleh orang lain, bahkan banyak orang lain seperti contoh yang akan dipakai dalam catatan ini.

Sedangkan beberapa kekurangan dari pilihan pemrograman secara online antara lain, bahwa programmer pengguna perlu memiliki akses Internet. Bagi pengguna yang tidak setiap saat diperlukan dapat terhubung dengan Internet secara lancar, maka akan menjadi masalah. Juga selain itu umumnya perlu semacam bootloader pada sistem target agar program yang dikompilasi secara online dapat langsung dipindahkan ke target dan dijalankan hanya dengan koneksi fisik berupa kabel USB. Ini mirip pada sistem Texas Instrument MSP432 yang sudah saya ungkap sebelumnya. Untuk produk dari ST seperti Nucleo-F446RE hal ini tidak menjadi masalah karena sistem tersebut sudah dapat diprogram langsung dari mbed melalui web browser.

Pada catatan kali ini saya mencoba ikut mengamalkan cara memprogram papan STM32F103C8T6 (STM32F103) dengan mempergunakan mbed. Berbeda dengan sistem Nucleo yang saya sebut di paragraf sebelum ini, papan STM32 yang murah ini tidak memiliki bootloader untuk mbed. Dengan kata lain ini bukan papan yang sebenarnya mbed enabled. Untungnya sebagaimana banyak hal lain dalam teknologi elektronika, seseorang telah mencoba memberikan solusi untuk masalah ini. Dan selama kita masih memiliki rasa ingin tahu, kemauan untuk bekerja keras dan kemauan untuk belajar, kita pun akan bisa menikmati solusi itu.

Pada dasarnya solusi diperoleh dengan cara mempergunakan konfigurasi dasar dari NUCLEO-F103RB yang tentu saja juga berintikan mikrokontroler seri STM32F103, tetapi STM32F103RBT6 dan bukan STM32F103C8T6 seperti yang akan dipakai di sini. Untungnya Zoltan Hudak menemukan cara untuk konfigurasi sistem Nucleo itu untuk papan yang harganya lebih murah, papan STM32F103C8T6.

Program yang diuat oleh Zoltan Hudak dapat dipergunakan oleh banyak orang yang telah memilki akun di mbed, nama programnya adalah STM32F103C8T6_Hello. Program ini bisa langsung diimpor oleh pengguna lain ke workspace-nya sendiri. Tetapi sebelum menunjukkan cara penggunaan mbed untuk uji coba kali ini, saya perlu menyampaikan cara menanggulangi satu kekurangan mbed dalam memprogram papan murah yang berintikan μC STM32F103C8T6. Kekurangan itu adalah bahwa compiler mbed tidak bisa melanjutkan memprogram papan μC STM32F103C8T6 secara langsung. Melainkan file bin hasil kompilasilah yang akan diberikan kepada pengguna (downloaded) untuk kemudian diunggah (uploaded) sendiri secara manual oleh pengguna ke μC STM32F103C8T6.

Untuk mengatasi kekurangan itu diperlukan suatu uploader (boleh juga disebut flasher) untuk memuat file hasil kompilasi ke μC. Saya memilih sistem yang gratis dan dapat dioperasikan juga di sistem GNU/Linux seperti Ubuntu atau Mint. Sistem tersebut adalah stlink, yang dapat dengan mudah diunduh gratis di sini. Panduan instalasinya pun mudai diikuti di halaman wiki di sini. Untuk keperluan ini yang paling diperlukan adalah program st-flash. Tetapi karena tujuan saya bukan hanya untuk melakukan uji coba, melainkan juga membangun platform yang bisa dipakai untuk pemrograman selanjutnya maka kerja konfigurasi saya lanjutkan. Agar dalam satu kurun waktu, satu rangkaian pekerjaan selesai. Karena itu saya melakukan copy agar program-program dari stlink dapat dipakai, dipanggil dari banyak tempat (direktori/folder).

Cara pertama yang bisa ditempuh adalah dengan menggunakan cara soft link;

ln -s /home/rumahku/stlink/build/st-flash ~/bin/st-flash
ln -s /home/rumahku/stlink/build/st-util ~/bin/st-util
ln -s /home/rumahku/stlink/build/st-info ~/bin/st-info
ln -s /home/rumahku/stlink/build/st-term ~/bin/st-term

Tetapi menurut saya dengan cara ini tidak menjadi mudah untuk mempergunakan st-link gui atau stlink-gui-local. Karena itu saya memilih cara kedua yaitu melakukan copy ke direktori yang kemudian berada dalam $PATH. Kebetulan saya telah memilikinya /home/rumahku/bin. Tetapi kalau belum memiki direktori seperti itu, cukup dibuat dengan cara yang mudah;

~ $ mkdir ./bin

Kemudian pertama kali copy file stlink-gui.ui dari /home/rumahku/stlink/src/tools/gui/stlink-gui.ui . Lalu copy file program dari /home/rumahku/stlink/build/  sehingga menjadi seperti pada Gambar 1.

Gambar 1.

Abaikan program FoxitReader, karena itu adalah program lain (pembaca file pdf).

Untuk memastikan bahwa semua program dalam direktori /home/rumahku/bin/ akan dapat dipanggil dari direktori lain maka direktori itu perlu ada di dalam PATH di file .profile. File .profile adalah file yang tersembunyi yang terdapat di /home/rumahku/ . Tanda titik di depan nama file menandakan bahwa file tersebut tersembunyi. Jika menggunakan “explorer” (file manager) seperti Thunar, maka pengguna perlu memberikan perintah dari keyboard berupa ctrl+h agar file yang tadinya tersembunyi di sistem GNU/Linux dapat terlihat. File itu kemudian bisa dibuka dengan gedit (text editor). Semua rangkaian cara ini relatif mudah daripada menggunakan terminal, bagi yang belum terbiasa. Lalu pastikan /home/rumahku/bin/ tercantum dalam isi file .profile.

PATH=/home/rumahku/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Setelah itu agar perubahan (jika ada) bisa langsung dimanfaatkan berikan perintah berikut;

~ $ source .profile

Untuk menguji apakah sistem sudah berhasil diperbaharui, panggil salah satu program dari direktori (acak) selain direktori stlink. Misalnya sekedar untuk mencoba;

~/Documents $ st-flash

Program st-flash inilah yang akan dipakai untuk melakukan upload file hasil kompilasi mbed ke papan μC.

mbed002Gambar 2. Percobaan pemanggilan berhasil

Setelah berhasil melakukan setup stlink yang tidak hanya akan dipakai untuk pemrograman cara ini tapi juga untuk banyak keperluan lain, sekarang kita bisa beralih ke tahapan selanjutnya. Tahapan utama adalah tahapan pemanfaatan mbed. Pertama kali pengguna perlu membuat akun di situs mbed, di link ini.

Gambar 3.

Gambar 4.

Setelah berhasil signup lalu login, berikutnya untuk percobaan ini, pengguna bisa langsung menuju STM32F103C8T6_Hello.

Gambar 5.

Tekan-tahan tanda “panah ke bawah” lalu pilih Import into Compiler atau Import with mbed CLI. Untuk cepatnya saya hanya melakukan klik cepat dan otomatis akan memiih pilihan defaultImport into Compiler.

mbed006Gambar 6.

mbed007Gambar 7. Setelah berhasil melakukan impor

Jika papan Nucleo-F103RB belum terdapat dalam daftar registered platform, bisa ditambahkan sendiri dengan melakukan klik pada Add Platform seperti pada Gambar 8.

mbed008Gambar 8.

mbed009Gambar 9.

mbed010Gambar 10.

Pertama, untuk uji coba ini ubah kode sesuai keperluan. Kedua pastikan platform yang sedang aktif adalah NUCLEO-F103RB, lalu klik perintah untuk Compile.

#include "stm32f103c8t6.h"
#include "mbed.h"
 
Serial      pc(PA_2, PA_3);
DigitalOut  myled(LED1);
 
int main() {
    while(1) {
        // The on-board LED is connected, via a resistor, to +3.3V (not to GND). 
        // So to turn the LED on or off we have to set it to 0 or 1 respectively
        myled = 0;      // turn the LED on
        wait(0.2);      // 200 ms
        myled = 1;      // turn the LED off
        wait(1.0);      // 1 sec
        pc.printf("Blinkrn");
    }
}

 

mbed011Gambar 11. Proses kompilasi sedang berlangsung.

mbed012Gambar 12. Download hasil kompilasi.

mbed013Gambar 13. Melihat detail hasil komplasi

mbed014Gambar 14. Informasi detail besar file hasil kompilasi.

Penting untuk mengamati bahwa batas besar program untuk μC STM32F103C8T6 adalah 64 kB, jangan sampai besar program melebihi batas itu. Zoltan Hudak sudah memberi peringatan yang jelas mengenai besar program ini.

mbed016Gambar 15. [image credit: Zoltan Hudak]

/media/uploads/hudakz/stm32f103c8t6_pinout03.png

Gambar 16. [image credit: Zoltan Hudak].

https://developer.mbed.org/media/uploads/hudakz/stm32f103c8t6_schematic.png

Gambar 17. [image credit: Zoltan Hudak].

mbed015Gambar 18. Proses upload ke mikrokontroler berhasil.

Demikianlah catatan saya kali ini mengenai contoh pemrograman salah satu mikrokontroler ARM Cortex-M3 dengan mbed, sekalipun tidak termasuk dalam golongan papan (board) yang sudah mbed enabled.