Instalasi AC6 SW4STM32 untuk pemrograman ARM Cortex-M3 STM32F103

Catatan ini adalah bagian ketiga dari catatan rangkaian proses penyusunan program untuk mikrokontroler keluarga STM32: STM32F103C8T6. Mikrokontroler ini dibangun berdasar arsitektur prosesor 32-bit ARM Cortex-M3, yang lebih komplex daripada kelompok 8-bit (MCS51, Armel AVR) dan 16-bit (MSP430). Karena kompleksitas itulah proses pengerjaannya pun berbeda dari keluarga mikrokontroler lainnya.

Pada bagian pertama dari rangkaian tulisan ini, telah diperkenalkan aplikasi/program komputer yang dibuat oleh STMicroelectronics, yaitu STM32CubeMX. Dalam catatan itu juga telah diungkapkan cara membaca arti dari penamaan mikrokontroler STM32. Dengan cara itu telah bisa didapatkan kode awal (initialization code) yang bisa dipergunakan untuk melakukan pemrograman pada (misalnya), seri STM32F103. Kode yang dikembangkan dapat berfungsi baik jika dimuat ke dalam mikrokontroler. Tetapi jika programmer perlu untuk melakukan debugging maka pengaturan itu belum lah cukup. Jika dipaksakan untuk dipergunakan maka akan menghasilkan kesalahan.

Diperlukan perbaikan pada konfigurasi dengan SW4STM32. Saya sendiri perlu waktu untuk menemukan akar masalah, penyebab kesalahan pada saat debugging. Perlu uji coba berulang kali sendiri dan penelusuran pengalaman oleh orang lain yang sudah pernah mencoba. Suatu saat akan coba saya ungkapkan sebagai bagian dari pelajaran bersama. Catatan konfigurasi yang sukses dipakai untuk keperluan debugging itu sudah saya ungkap melalui tulisan di ini, yang merupakan bagian kedua dari rangkaian tulisan.

Untuk bagian ketiga ini saya akan coba mengungkap catatan tentang penggunaan SW4STM32 untuk pemrograman dan debugging.

sw4stm32f001Gambar 1.

SW4STM32 adalah singkatan dari System Workbench for STM32, seperti yang diperlihatkan pada Gambar 1. Pada dasarnya SW4STM32 adalah sebuah IDE (Integrated Development Environment) yang dibangun di atas IDE Eclipse. Ini hampir mirip dengan salah satu implementasi PlatormIO yang dibangun dengan menggunakan text editor Atom. Dari menu Help dapat terlihat versi Eclipse yang dipergunakan, seperti pada Gambar 2. Dengan catatan tentu setiap pembaruan versi SW2STM32 akan ada kemungkinan bahwa versi Eclipse IDE juga akan berubah.

sw4stm32f002Gambar 2. Versi Eclipse IDE yang dipergunakan sebagai dasar dari SW4STM32

sw4stm32f003Gambar 3. Versi SW4STM32 yang saat ini saya pergunakan.

Saya dapat memberikan langsung tautan ke halaman untuk melakukan pengunduhan progaram SW4STM32, tetapi akan lebih bagus jika prosesnya dimundurkan sedikit lebih jauh. Bagaimana mencari melalui kata kunci di layanan mesin pencari Google.

sw4stm32f004Gambar 4.

Dari situs STMicroelectronics, dapat ditemukan keterangan singkat yang baik mengenai SW4STM32. Intinya program SW4STM32 tidak dibuat oleh STMicroelectronics, melainkan oleh pihak ketiga yaitu AC6. Sedangkan software dan layanan yang berikaitan dengannya di www.openstm32.org. Untuk mendapatkan akses ke layanan download maupun panduan instalasi, pengguna perlu terlebih dahulu melakukan registrasi di situs openstm32, sebagaimana terlihat di Gambar 6.

sw4stm32f005Gambar 5.

sw4stm32f006Gambar 6.

Di halaman http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer dapat ditemui pilihan instalasi untuk sistem Windows / Mac OS/X / GNU/Linux. Ada beberapa informasi yang cukup penting di halaman tersebut, berkenaan dengan proses instalasi, misalnya konsisi saat perlu dilakukan perintah:

sudo apt-get install libc6:i386 lib32ncurses5

SW4STM32 juga membutuhkan tersedianya Java, pada saat saya menulis ini yang diperlukan adalah minimal JavaRE 7. Panduan instalasi Java bisa dicari di sini.

sw4stm32f007Gambar 7.

Gambar 7, hasil screenshot halaman panduan instalasi memberikan keterangan yang penting mengenai instalasi pada Ubuntu 12.04. Pada sistem saya, SW4STM32 masih dapat berfungsi dengan baik:

Linux pengguna 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Kadang-kadang akses ke Properties >> C/C++ Build >> Settings memerlukan waktu yang sangat lama. Di sistem GNU/Linux Ubuntu atau turunannya salah satu solusi yang saya coba dan berhasil dipergunakan adalah yang berasal dari tutorial ini >> [link]. Untuk konfigurasi desktop entry (icons) /home/rumahku/Desktop/sw4stm32_shortcut.desktop.

env UBUNTU_MENUPROXY=0 SWT_GTK3=0

[Desktop Entry]
Name=System Workbench for STM32
Comment=System Workbench for STM32 IDE
Exec=env UBUNTU_MENUPROXY=0 SWT_GTK3=0 /home/sunu/AC6SyWbSTM32/eclipse
Icon=/home/sunu/AC6SyWbSTM32/logo_openstm32.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

 

Gambar 8. SW4STM32 saat pertama kali dipergunakan

Untuk melakukan progrograman atau debugging pada hasil konfigurasi awal yang diperoleh sebelumnya dari kegiatan yang telah saya catatkan di halaman ini dan halaman ini, pengguna perlu melakukan impor seperti terlihat pada Gambar 9.

sw4stm32f009Gambar 9.

sw4stm32f010Gambar 10.

sw4stm32f011Gambar 11. Melakukan import kode dasar yang dihasilkan oleh STM32CubeMX

sw4stm32f012Gambar 12. Pengujian pertama kali kode dasar (tanpa perubahan kode)

sw4stm32f013Gambar 13. Hasil dari perintah build.

Penggunaan SW4STM32 untuk kegiatan debugging dan pemrograman pada hardware mikrokontroler, akan dibahas di lain catatan.

Uji coba kompilasi program MSP430G2553 dengan Codelite

Untuk melakukan pemrograman pada mikrokontroler MSP430G2553, ada beberapa cara yang bisa dipakai. Misalnya dengan menggunakan Energia, seperti yang sudah pernah ditunjukkan sebelumnya. Cara lain yang disarankan oleh TI (Texas Instruments) adalah dengan menggunakan CCS (Code Composer Studio), baik versi desktop maupun versi cloud (web). Tetapi selain itu, sebenarnya ada banyak aplikasi yang bisa dipakai untuk melakukan pemrograman, selama terdapat akses yang baik ke compiler dan toolchain lainnya.

Dengan akses ke compiler, seorang programer dapat memilih text editor yang hendak dipakainya. Bisa berupa software klasik seperti Vim atau Emacs, bisa juga yang relatif modern seperti nano atau gedit. Programer juga bisa memilih IDE yang lebih kompleks untuk proyeknya seperti Geany, CodeLite, Code::Blocks, atau bahkan yang berbasis Eclipse.

TI telah menyediakan dua versi desktop IDE yang normalnya masing-masing bekerja di sistem Windows dan GNU/Linux. Sayangnya baik CCSv6 maupun CCSv5 belum dapat berfungsi dengan baik di laptop saya. Pemrograman tentu masih bisa dilakukan dengan text editor yang sederhana, tetapi untuk memudahkan pengerjaan maka saya coba mempergunakan IDE. Kali ini saya mencoba menggunakan Codelite. Bila dibandingkan dengan IDE berbasis Eclipse atau bahkan Code::Blocks, menurut saya Codelite lebih ringan dan mempercepat kerja. Sebelum menggunakan Sublime Text, saya senang mempergunakan IDE ini. IDE Geany sebenarnya lebih terasa ringan, tetapi untuk proyek dengan compiler dan toolchain yang berbeda-beda, Codelite lebih memudahkan pekerjaan.

Sampai saat saya menulis catatan ini untuk pemrograman Launchpad MSP430 (MSP-EXP430G2) dengan CodeLite masih perlu saya bagi ke dalam dua tahapan yang berbeda. Pekerjaan coding, compiling, building, sudah bisa saya lakukan dari dalam CodeLite. Sedangkan untuk uploading ke launchpad masih saya lakukan di terminal dengan mspdebug.

Instalasi CodeLite di sistem GNU/Linux Ubuntu dan variannya dapat diakukan dengan perintah sudo apt-get install codelite. Untuk lebih mengenal CodeLite, berikut beberapa sumber bacaan yang baik;

[intense_emphasis color=”#FFB157″ tag=”span”] [/intense_emphasis]

 

Berikutnya untuk menguji apakah sistem IDE dan toolchain sudah berfungsi dengan baik diperlukan kode untuk uji coba. Template dasar kode kadang-kadang dapat berfungsi baik sebagai kode uji dasar. Tetapi sering juga terjadi, terutama pada embedded system,  diperlukan kode yang sedikit lebih lengkap. Jika di PC dikenal kode program “Hello World“, maka di embedded systems dikenal kode “Blinking Led” yang berfungsi utama sama yaitu untuk memastikan sistem kompilasi dan pendukungnya bekerja dengan baik. Sebagai bonus, kode led berkedip juga membantu untuk memeriksa kondisi peripheral. Beberapa sumber untuk contoh kode dasar yang dapat dipakai;

Pada dasarnya semua kode pada sumber-sumber acuan di atas adalah serupa. Ini adalah salah satu bukti bahwa sepanjang berkenaan dengan sumber belajar untuk electronics engineering technology, jauh lebih sering daripada tidak sumbernya sudah cukup banyak. Tergantung kemauan dan kesempatan untuk mempelajarinya. Dari contoh-contoh itu, salah satu yang bisa dipakai untuk pengujian adalah kode berikut:

//Demo app to blink the red LED (LED1) on the TI Launchpad
//which is attached to P1.0
//The green LED(LED2) is connected to P1.6

#include <msp430g2553.h>
 
int main(void) {
  volatile int i;
 
  // stop watchdog timer
  WDTCTL = WDTPW | WDTHOLD;
  // set up bit 0 of P1 as output
  P1DIR = 0x01;
  // intialize bit 0 of P1 to 0
  P1OUT = 0x00;
 
  // loop forever
  for (;;) {
    // toggle bit 0 of P1
    P1OUT ^= 0x01;
    // delay for a while
    for (i = 0; i < 0x6000; i++);
  }
}

 

Selain contoh kode sederhana (yang diharapkan sudah tidak mengandung kesalahan yang signifikan), pengguna juga perlu mempelajari bagaimana melakukan instalasi toolchain (termasuk compiler). Beberapa sumber belajar singkat yang bagus untuk dibaca mengenai hal ini:

Hasil instalasi toolchain dari satu atau lebih cara dapat kemudian diperiksa, di sistem saya hasilnya:

[intense_emphasis color=”#25a89f” tag=”span”]
$ msp430
msp430-addr2line  msp430-g++        msp430-ld.bfd     msp430-run
msp430-ar         msp430-gcc        msp430mcu-config  msp430-size
msp430-as         msp430-gcc-4.6.3  msp430-nm         msp430-strings
msp430-c++        msp430-gcov       msp430-objcopy    msp430-strip
msp430-c++filt    msp430-gdb        msp430-objdump
msp430-cpp        msp430-gprof      msp430-ranlib
msp430-elfedit    msp430-ld         msp430-readelf

$ locate msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia0101E0017/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia0101E0017/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc
/home/rumahku/energia18/hardware/tools/msp430/bin/msp430-gcc-4.6.3
/home/rumahku/energia18/hardware/tools/msp430/share/man/man1/msp430-gcc.1
/home/rumahku/msp430toolChain/bin/msp430-gcc
/home/rumahku/msp430toolChain/bin/msp430-gcc-4.7.0
/home/rumahku/msp430toolChain/bin/msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-gcc-ranlib
/home/rumahku/msp430toolChain/bin/msp430-gcc-wrapper
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ar
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-nm
/home/rumahku/msp430toolChain/bin/msp430-msp430-gcc-ranlib
/home/rumahku/msp430toolChain/share/man/man1/msp430-gcc.1
/usr/bin/msp430-gcc
/usr/bin/msp430-gcc-4.6.3
/usr/share/codeblocks/compilers/compiler_msp430-gcc.xml
/usr/share/codeblocks/compilers/options_msp430-gcc.xml

$ msp430-gcc -v
Using built-in specs.
Reading specs from /usr/lib/gcc/msp430/4.6.3/../../../../msp430/lib/msp430mcu.spec
COLLECT_GCC=msp430-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/msp430/4.6.3/lto-wrapper
Target: msp430
Configured with: '/build/buildd/gcc-msp430-4.6.3~mspgcc-20120406/./gcc-4.6.3/configure' -v --enable-languages=c,c++ --prefix=/usr --with-system-zlib --infodir='/usr/share/info' --mandir='/usr/share/man' --bindir='/usr/bin' --libexecdir='/usr/lib' --libdir='/usr/lib' --build=x86_64-linux-gnu --host=x86_64-linux-gnu MAKEINFO=missing --target=msp430
Thread model: single
gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (GCC)
[/intense_emphasis]

Sistem GNU/Linux;

[intense_emphasis color=”#AAB1BE” tag=”span”]

Linux XXX 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

[/intense_emphasis]

 

Perbandingan antar compiler menurut TI GCC User’s Guide [pdf file]

evd8

codelite002Gambar 1.

codelite001Gambar 2.

codelite003Gambar 3.

codelite004Gambar 4.

codelite005Gambar 5.

codelite006Gambar 6.

codelite007Gambar 7.

codelite008Gambar 8.

codelite009Gambar 9.

codelite010Gambar 10.

codelite011

Gambar 11.

codelite012Gambar 12.

codelite013Gambar 13.