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.

 

Konfigurasi external tools configurations pada SW4STM32 untuk st-flash

Catatan ini dalah bagian terakhir dari rangkaian catatan pengenalan dan tutorial mengenai penggunaan STM32CubeMX dan SW4STM32 untuk pemrograman mikrokontroler STM32. Sebagai contoh, dalam rangkaian tulisan ini dipergunakan papan sistem mikrokotroler STM32F103C8T6. Di bagian pertama dari rangkaian tutorial adalah pengenalan terhadap program STM32CubeMX. Bagian kedua memaparkan bagaimana melakukan konfigurasi pada STM32CubeMX sehingga hasilnya sesuai untuk keperluan debugging. Kemudian pada bagian ketiga diungkapkan cara instalasi dan inisiasi program SW4STM32. Bagian keempat memaparkan tahap-tahap yang perlu dilakukan untuk proses debugging.

Di bagian akhir ini akan saya coba ungkapkan catatan mengenai cara melakukan konfigurasi sehingga pengguna dalam melakukan flashing mikrokontroler dapat melakukannya “dari dalam” SW4STM32.

znap01Gambar 1.

znap02Gambar 2.

Pada Gambar 1 dan Gambar 2 terdapat pilihan berupa st-flash write dan st-flash erase. Keduanya harus dibuat sendiri oleh pengguna melalui fasilitas External Tools Configurations, seperti pada Gambar 2. Pilih New pada bagian yang saya tandai dengan kotak berwarna merah. Di sampingnya terdapat beberapa pilihan yang mungkin suatu saat akan diperlukan, silakan diperiksa sendiri. Pada {1} adalah tab Main dan didalamnya diisikan parameter yang sesuai. Misalnya pada {2}, isikan path ke arah letak program st-flash di dalam sistem komputer penguna. Lalu pada {3} arahkan target yang sesuai, biasanya yang dipakai untuk memprogram mikrokontroler adalah yang berasal dari ./Release, yang merupakan versi final. Tetapi dapat juga berasal dari hasil kompilasi pada direktori Debug seperti contoh saya pada Gambar 3.

znap03Gambar 3.

znap04Gambar 4.

znap06Gambar 5.

znap07Gambar 6.

Setelah tahap ini, pengguna dapat memilih mode operasi seperti terlihat pada Gambar 1 atau Gambar 2. Pengguna bisa memilih untuk menghapus atau melakukan pemrograman ke mikrokontroler anggota keluarga STM32. Jika operasi erase atau pemrograman ulang gagal dilakukan, bisa dicoba dengan melakukan erase dan reset pada posisi jumper seperti pada Gambar 7.

wp-1472127176031.jpegGambar 7.

Mengembalikan jumper ke posisi semula untuk mode operasi (running) dan pemrograman normal seperti Gambar 8.

wp-1472023019498.jpegGambar 8.

Mempersiapkan program STM32F103C8T6 dengan mempergunakan STM32CubeMX

ztm32N01image credit: http://www.st.com/resource/en/data_brief/stm32cubemx.pdf

Sebagaimana telah diperkenalkan pada artikel yang lalu, STM32CubeMX memang terbukti benar-benar mempermudah pekerjaan para professional embedded developer maupun upaya belajar bagi yang baru memulai. Ada beberapa pengaturan yang diperlukan yang akan ditemui sepanjang proses belajar untuk memaksimalkan penggunaan STM32CubeMX. Salah satu contohnya adalah pengaruh konfigurasi yang dihasilkan (generated) oleh STM32CubeMX pada proses debugging dengan menggunakan OpenOCD. Secara default STM32CubeMX akan mematikan (disable) kemampuan debugging pada mikrokontroler STM32F103C8T6 yang sedanga dikonfigurasi. Jika ini tidak diubah maka proses debugging  mikrokontroler STM32F103C8T6 dengan OpenOCD melalui ST-Link V2 (clone) akan terganggu dan menimbulkan kesalahan.

ztm32N03Gambar 1.

Gambar 1 menampilkan konfigurasi awal dan tanda panah merah menunjukkan peripheral SYS  yang perlu diatur ulang dari nilai asalnya. Nilai yang perlu diubah ditampilkan pada Gambar 2.

ztm32N04Gambar 2.

ztm32N05Gambar 3.

Agar proses debugging mikrokontroler STM32F103C8T6 dengan OpenOCD dan ST-Link V2 dapat berjalan lancar, pengguna bisa memilih mode debug Serial Wire pada peripheral SYS, sebagaimana pada {1} di Gambar 3.

ztm32N06Gambar 4.

Setelah melakukan konfigurasi untuk proses debug pada seperti pada Gambar 3, proses dapat dilanjutkan dengan melakkan konfigurasi pada semua bagian lain yang diperlukan. Misalnya dalam mempelajari STM32 menggunakan papan μC STM32F103C8T6 yang murah meriah, pengguna perlu melakukan konfigurasi ulang pada pin PC13. Pin tersebut terhubung dengan satu led berwarna merah yang sangat mudah dijadikan bahan awal belajar maupun sebagai salah satu penanda proses (termasuk untuk debugging). Hasilnya seperti yang terlihat di Gambar 4, sedangkan untuk proses pengerjaannya dapat dibaca pada post sebelumnya di sini.

wp-1472023019498.jpegGambar 5. Papan sistem μC STM32F103C8T6 yang relatif murah sebagai sarana belajar.

Hasil konfigurasi STM32CubeMX yang berhubungan dengan debugging  yang telah diungkapkan dapat dilihat di dalam file stm32f1xx_hal_msp.c seperti yang terlihat di Gambar 6.

ztm32N07Gambar 6.

Baris kode yang benar yang memungkinkan dilakukannya proses debugging yang telah diatur dengan STM32CubeMX, yang teradapat di file stm32f1xx_hal_msp.c adalah:

__HAL_AFIO_REMAP_SWJ_NOJTAG();

Atau seperti bisa dilihat pada Gambar 7 pada baris ke 75. Baris ke 73 adalah kode yang dihasilkan secara default oleh CubeMX, kode ini akan menghasilkan kesalahan dalam proses debugging dengan menggunakan OpenOCD+ST-Link V2(+GDB). Kode pada baris ke 74 adalah untuk konfigurasi dengan JTAG 4 pin.

ztm32N08Gambar 7.

//  __HAL_AFIO_REMAP_SWJ_DISABLE(); //Kalau JTAG disabled pada STM32CubeMX akan error
//  __HAL_AFIO_REMAP_SWJ_NONJTRST(); //JTAG 4
  __HAL_AFIO_REMAP_SWJ_NOJTAG(); // Serial Wire debug

ztm32N09Gambar 8. [Klik pada gambar untuk memperbesar tampilan]

Gambar 8 menampilkan proses debugging yang benar dengan mempergunakan konfigurasi seperti yang terlihat pada Gambar 7 (debug enabled). Sedangkan pada Gambar 9, terlihat kesalahan yang terjadi jika masih menggunakan kode default: __HAL_AFIO_REMAP_SWJ_DISABLE. Pesan kesalahan dari OpenOCD:

Error: jtag status contains invalid mode value - communication failure
Polling target stm32f1x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect

ztm32N10Gambar 9. Bukti tampilan kesalahan debugging STM32F103C8 sebagai akibat dari salah konfigurasi pada STM32CubeMX

Video singkat cuplikan contoh stepping pada proses debugging.

[intense_video video_type=”youtube” video_url=”https://www.youtube.com/watch?v=6MtAfxhhEsE”]

Mengenal STM32CubeMX untuk mempelajari ARM Cortex

stm32cubemx027

Dalam mempelajari penggunaan dan pemanfaatan mikrokontroler dengan inti ARM Cortex, sejauh ini, saya setuju dengan pendapat yang menyatakan bahwa arsitektur ini complex. Bila dibandingkan dengan keluarga MCS51 (8051) seperti Atmel AT89C/AT89S, keluarga AVR (ATmega*/ATtiny*), keluarga TI MSP430 atau bahkan keluarga STM8. Perbandingan bisa dilakukan dari berbagai sisi, dan mungkin akan saya coba di lain waktu jika ada kesempatan.

Untuk saat ini saya akan mengusahakan untuk dapat menuliskan catatan mengenai STM32CubeMX yang merupakan aplikasi yang dikeluarkan oleh STMicroelectronics. Aplikasi ini sangat membantu upaya untuk mempelajari penggunaan mikrokontroler ARM Cortex seperti STM32F103C8T6 (STM32). Berbeda dengan arsitektur 8-bit dan 16-bit yang sebelumnya populer, arsitektur 32-bit dari ARM ini memerlukan usaha lebih untuk dikonfigurasi. Tantangan untuk menghemat sumberdaya energi dan waktu bagi para profesional ini sepertinya dipahami oleh STMicroelectronics. Efek baiknya (kemudahan melakukan konfigurasi) juga dapat dirasakan oleh mereka yang baru belajar, seperti saya. Menurut STMicroelectronics sendiri sebagai berikut:

STM32CubeMX is part of STMicroelectronics
STMCube™ original initiative to ease developers
life by reducing development efforts, time and
cost. STM32Cube covers STM32 portfolio.

STM32Cube includes the STM32CubeMX which
is a graphical software configuration tool that
allows generating C initialization code using
graphical wizards.

It also embeds a comprehensive software
platform, delivered per series (such as
STM32CubeF4 for STM32F4 series). This
platform includes the STM32Cube HAL (an
STM32 abstraction layer embedded software,
ensuring maximized portability across STM32
portfolio), plus a consistent set of middleware
components (RTOS, USB, TCP/IP and graphics).

Singkatnya, dengan aplikasi/program komputer STM32CubeMX ini pengguna yang baru belajar dimungkinkan untuk segera memulai tahapan belajarnya dengan lebih mudah. Misalnya waktu untuk mendapatkan kerangka yang lengkap dari program “led berkedip” menjadi jauh lebih singkat. Berbagai kerumitan konfigurasi dapat kemudian dipelajari secara bertahap. Keluarga mikrokontroler STM32 (32-bit) yang berbasis pada ARM Cortex ini cukup dikenal sebagai keluarga mikrokontroler yang kurva belajarnya curam, alias perlu usaha extra (steep learning curve).

Untuk keperluan belajar maka tidak seluruh kemampuan STM32CubeMX perlu diungkap di sini. Hanya yang benar-benar dipergunakan untuk menghasilkan kode program yang sederhana saja yang akan dituliskan.

DOWNLOAD

Pertama kali program STM32CubeMX dapat diunduh di sini: link atau di sini. Yang pernah saya lakukan, hasilnya berupa file en.stm32cubemx.zip. Kemudian file  ini kemudian perlu di ekstrak oleh pengguna ke direktori yang nanti akan menjadi direktori tetap (buka instalasi) dari program ini, seperti terlihat di Gambar 1.

stm32cubemx001Gambar 1.

PENGGUNAAN

Pengguna bisa membuatkan icon di desktop seperti pada Gambar 2.

stm32cubemx002Gambar 2.

Untuk menghasilkan icon ke aplikasi STM32CubeMX dapat menggunakan konfigurasi berikut:

[Desktop Entry]
Encoding=UTF-8
Name=STM32CubeMX
Comment=
Exec=/home/rumahku/STM32CubeMX/STM32CubeMX
Icon=/usr/share/icons/hicolor/48x48/apps/display.im6.png
Categories=Application;Development;Java
Version=1.0
Type=Application
Terminal=0
Name[en_US.UTF-8]=STM32CubeMX

Dengan konfigurasi ini, untuk memanggil aplikasi pengguna cukup melakukan doble-click pada icon STM32CubeMX.

Gambar-gambar berikut dapat diperbesar dengan melakukan klik pada gambar.

stm32cubemx003Gambar 3.

stm32cubemx004Gambar 4

Pengguna bisa memilih berdasarkan MCU [1] atau memilih berdasarkan papan sirkuit [2], seperti Gambar 4.

stm32cubemx005Gambar 5. Memilih berdasarkan tipe papan sirkuit (sistem).

Misalkan pengguna sudah memiliki board produksi ST, maka sebagaimana terlihat pada Gambar 5 yang perlu dilakukan adalah membatasi jumlah tampilan dengan memilih “Type of Board”. Ini terutama bermanfaat jika item yang muncul berjumlah banyak. Jika masih sedikit, bisa langsung dipilih dari daftar dan kemudian melakukan klik pada tombol OK.

stm32cubemx006Gambar 6.

Pada Gambar 6, pada [1] pengguna dapat memilih salah satu (atau bergantian) konfigurasi yang akan dilakukan pada mikrokontroler yang dipilih (kali ini berdasarkan jenis papan).

Seperti yang sebelumnya dapat dilihat di Gambar 4, pemilihan bisa juga dilakukan berdasarkan jenis spesifik mikrokontroler. Untuk ini dalam Gambar 4, pengguna memilih [1] lalu [3].

stm32cubemx007Gambar 7.

Misalkan pengguna ingin melakukan konfigurasi untuk mikrokontroler STM32F103C8T6, maka pada Gambar 7 pengguna dapat melakukan penapisan (filtering) pada bagian yang saya beri tanda kotak merah [1]. Untuk mengurangi jumlah tampilan komponen yang banyak, di pilihan Series gunakan STM32F1. Lalu lebih spesifik dipersempit dengan memilih Line STM32F103. Mikrokontroler yang dituju akan ada dalam daftar yang tampil.

Sebagai tambahan pengetahuan menarik untuk melihat cara penamaan keluarga mikrokontroler STM32 oleh ST (STM32 microcontrollers naming conventions).

stm32cubemx008stm32cubemx009stm32cubemx010Gambar 8.

Page 216 - 1Gambar 9.

Untuk mikrokontroler ARM Cortex-M3 STM32F103C8T6, berdasarkan (screenshot) Gambar 8 dan Gambar 9 dapat diketahui:

Device family STM32
Product type General purpose
Device subfamily 103
Pin count 48 pins
Flash memory size 64 KBytes
Package LQFP
Temperature range -40 ~ 85 °C

stm32cubemx011Gambar 10. Cuplikan tampilan dari STM32CubeMX
[lagi, klik gambar untuk memperbesar tampilan]

stm32cubemx012stm32cubemx013stm32cubemx014Gambar 11. Posisi STM32F103C8 di peta produk STM32 [sumber].

Kembali ke tampilan STM32CubeMX, setelah memilih mikrokontroler yang memang akan dikonfigurasikan (STM32F103C8T6 / STM32F103C8) dan menekan tombol OK, tampilan program akan seperti pada Gambar 12.stm32cubemx015Gambar 12.

stm32cubemx016Gambar 13. Memilih pin PC13 dengan salah satu dari dua cara.

Pada Gambar 13, pengguna yang perlu mengatur pin pengendali led pada papan sirkuit (pin PC13) dengan salah satu dari dua cara.

stm32cubemx017Gambar 14.

Pada Gambar 14, lakukan left-click pada pin sampai agar pilihan menu terlihat.

stm32cubemx018Gambar 15. Tampilan setelah PC13 diatur sebagai pin keluaran (GPIO_Output).

stm32cubemx019Gambar 16. Pada tab configuration pilih GPIO.

stm32cubemx020

Gambar 17.

Jika dikehendaki/diperlukan, pengguna bisa memberi label pada pin. Pilih baris [1] lalu isi nama (User Label) [2], kemudian klik OK.

Gambar 18.

Gambar 19. Sejumlah tab untuk perintah “Generate Code”

Pada Gambar 19, diperlihatkan bahwa untuk toolchain / IDE saya memilih SW4STM32 (System Workbench for STM32), yang secara legal gratis dan dapat beroperasi di sistem GNU/Linux maupun MS Windows.

stm32cubemx023Gambar 20. Pilih salah satu cara  penyalinan pustaka yang dikehendaki.

stm32cubemx024Gambar 21. Ada kemungkinan STM32CubeMX akan meminta pengguna mengizinkan program mengunduh beberapa program tambahan.

Gambar 22.

stm32cubemx026Gambar 23. [klik gambar untuk memperbesar]

Gambar 23 adalah gambar hasil screenshot terhadap tampilan SW4STM32 (System Workbench for STM32) yang telah berhasil melakukan kompilasi kode yang dihasilkan oleh STM32CubeMX. Tentu saja user’s code masih dalam keadaan kosong. Hal ini disengaja agar percobaan dapat fokus melihat kondisi awal dari kode program yang dihasilkan oleh STM32CubeMX.  Catatan lebih panjang akan diunggah lain waktu jika ada kelapangan.

UPDATE

Hasil konfigurasi dalam catatan ini, berfungsi baik untuk sebagai kode dasar untuk memprogram mikrokontroler tetapi tidak cocok untuk jika perlu dilakukan proses debugging dengan OpenOCD dan ST-Link V2. Untuk menghasilkan konfigurasi dan kode dasar yang sesuai silakan membaca catatan di sini [link].

Berikut video singkat pembuktian bahwa cara ini (menggunakan STM32CubeMX) berhasil dengan baik:

[youtube =”https://youtu.be/R0JG7l672nA”]

 

Sumber belajar tentang STM32CubeMX:

  • STM32CubeMX
    STM32 configuration and initialization C code generation.
  • UM1718, User manual
    STM32CubeMX for ST M32 configuration  and initialization C code generation.

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.

Cara mudah menguji papan STM32F103C8T6 menggunakan Arduino IDE

Mikrokontroler STM32103C8T6 adalah salah satu mikrokontroler keluarga STM32 (tepatnya STM32F10xxx) yang diproduksi oleh STMicroelectronics. Mikrokontroler ini adalah μC yang tergolong sebagai medium-density devices (64 Kbytes). Pada catatan terdahulu tentang Maple Mini, sebenarnya μC STM32103C8T6 inilah yang dipergunakan sebagai inti di sistem itu.

Kedua papan sistem mikrokontroler itu saya beli dari salah satu penjual di Tokopedia, Toko Bey. Saya tidak berafiliasi atau bahkan mengenal pemilik toko online tersebut, tetapi salah satu yang menyenangkan adalah bahwa penjualnya memberikan beberapa tutorial yang sangat membantu bagi pemula untuk mengenal produk yang dijual. Di saat customer education masih sekedar jargon, praktik seperti itu tentu sangat terpuji. Saya sangat berharap investasi waktu dan tenaga dalam mempelajari suatu arsitektur prosesor baru akan mencapai manfaat yang lebih kuat karena ketersediaan pasokan alat/perangkat terjamin. Sungguh berharap para merchant akan cukup punya “nafas” dan pasar untuk tetap berjualan mikrokontroler dangan arsitektur ARM seperti ini dengan harga yang cukup terjangkau.

Nah salah satu keperluan yang penting saat suatu barang seperti ini datang adalah cara melakukan uji coba kondisi barang, setidaknya untuk beberapa bagian (parsial). Apalagi jika baru akan belajar mempergunakannya, perlu sesuatu yang bisa dipergunakan dengan cepat. Nah di sinilah peran STM32duino. STM32duino adalah upaya untuk memungkinkan (beberapa) mikrokontroler anggota keluarga STM32 untuk dapat diprogram dengan mengunakan Arduino IDE melalui penambahan pustaka.

Hubungan/koneksi antara ST-Link v2 [ compatible ] (semua di satu sisi header) dengan papan STM32F103C8T6:

ST-LINK V2   Papan STM32F103C8T6
SWCLK >> DCLK
SWDIO >> DIO
GND >> GND
3.3V >> 3.3V

 

 

 

wp-1471525805456.jpegGambar 1.

Cara ini juga mempermudah upaya prototyping, bukan hanya untuk belajar tetapi juga untuk menguji dan menyusun ide-ide secara lebih cepat. Setelah itu baru kemudian diperbaiki dalam hal efektifitas dan efisiensi program/sistem.

stm32f103c8t6Gambar 2.

Cara lain akan dimuat pada tulisan di lain waktu.

 

Uji Maple Mini compatible (STM32F103C8T6)

Jika sebelum ini catatan yang saya unggah adalah mengenai STM8S103F3P6 (STM8) maka untuk catatan ini giliran mikrokontroler STM32F103C8T6. Sekalipun sama-sama produksi STMicroelectronics, arsitektur keduanya berbeda. STM32F103C8T6 adalah bagian dari keluarga STM32, μC 32-bit yang core prosesornya bukan berasal dari rancangan ST sendiri (seperti STM8), melainkan mengadopsi arsitektur dasar dari ARM. Tepatnya ARM®Cortex®-M3 32-bit RISC core [link]. Lebih jauh tentang ini nanti akan diungkapkan di artikel lain.

Untuk artikel ini, akan coba diungkap pengujian cepat pada sistem STM8S103F3P6 yang merupakan papan Maple Mini atau yang kompatibel. Ini mirip dengan Arduino (Uno/Zero/Mega/Micro/Nano) yang sebenarnya mempergunakan mikrokontroler Atmel AVR. Untuk Maple Mini ini pun sama, bahkan kalau melihat IDE-nya maka pengguna akan segera ingat dengan IDE milik Arduino (tentu jika sudah pernah melihat sebelumnya).

wp-1471368581561.jpegGambar 1.

Berdasarkan penanda pada papan, Maple Mini clone yang saya miliki sepertinya diproduksi oleh Baite. Papan ini clone ini menggunakan bootloader asli dari LeafLabs. Produk asli dari LeafLabs (Maple Mini) sepertinya sudah tidak diproduksi lagi.

BTE-1407fGambar 2. [image credit: lincomatic.com]

BTE-1407bbGambar 3. [image credit: lincomatic.com]

Berbeda dengan papan Arduino (dan clone-nya), cara pemrograman clone dari Maple Mini ini agak “unik” jika menggunakan STM32duino (Arduino IDE) maupun Maple IDE v.0.0.12 (dibangun dari Arduino 0018). Menurut Roger Clark, untuk pemrograman dari OS GNU/Linux papan Maple Mini ini perlu perlakuan khusus agar dapat diprogram dengan baik. Setelah tombol reset pada papan ditekan, saat lampu led masih berkedip cepat maka pengguna harus segera menekan-tahan tombol yang lain. Saat led mulai berkedip pelan, pengguna bisa melepas tombol tadi. Indikator keberhasilan prosedur ini akan mudah dilihat jika sistem tidak berisi kode program led berkedip (blinking). Pada kondisi normal, setelah tobol reset ditekan lalu dilepas, led akan berkedip dalam dua tahap. Tahap cepat lalu tahap lambat, kemudian led akan padam. Jika pengguna sukses melakukan prosedur sebagaimana yang dikemukakan di atas maka saat tahap led berkedip cepat, led kemudian akan terus berkedip lambat dan tidak berhenti.

Before each upload the board needs to be put into “Perpetual bootloader” mode.

  • Press the reset button (it’s the button labeled RESET). The board should blink quickly 6 times, then blinks slowly a few more times, then stop flashing (unless it has a sketch loaded that flashes the LED)
  • Press reset again, and this time push and hold the other button during the 6 fast blinks (the normal button is labeled BUT). You can release it once the slow blinks start.

Someone did a Youtube video of this http://youtu.be/rvNIeKuXsxM

Pemantauan bisa jadi lebih mudah jika di sistem anda juga anda install sendiri program dfu-util.

$ sudo apt-get install dfu-util

Jika papan sedang tidak berada dalam mode “perpetual bootloader” maka hasil tampilan akan seperti pada Gambar 4.

maple001Gambar 4.

Sedangkan jika papan berhasil dibuat berada dalam mode perpetual bootloader, terus menerus sampai IDE mengirim sinyal reset, maka tampilan akan seperti pada Gambar 5.

maple002Gambar 5.

Selain itu jangan lupa juga untuk mengatur file konfigurasi udev. Jika perlu buar file baru (gunakan sudo jika perlu akses sebagai admin) /etc/udev/rules.d/45-maple.rules . Mengacu sumber inilah seharusnya isi file tersebut.

ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="dialout"
ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="dialout"
ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="dialout" SYMLINK+="maple"
ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="dialout" SYMLINK+="maple"

 

Selain dengan cara memasukkan sistem papan ke “perpetual bootloader mode” ada cara lain yang berhasil saya coba. Caranya adalah setelah melakukan perintah upload dari IDE, maka akan ada pesan di IDE; “Uploading to I/O Board”. Proses akan seperti terhenti, hang. Pada saat itulah saya menekan tombol reset di papan mikrokontroler hingga program selesai di-upload (diunggah).

maple004

maple005Gambar 6.

Listing program kosong, jika diperlukan.

maple003Gambar 7.

maple006Gambar 8. Pemrograman menggunakan Arduino IDE (menggunakan STM32duino)

Untuk pemrograman dengan Arduino IDE 1.6.10 ada tantangan tambahan jika mempergunakan cara hanya menekan tombol reset satu kali untuk memprogram. Berbeda dengan Maple IDE yang berbasis pada Arduino IDE yang lama, pada Arduino IDE yang baru ini penguna harus lebih sigap, cepat dalam hal menekan tombol reset pada papan Maple Mini. Tidak terdapat saat “menunggu” seperti pada Maple IDE, jika terlambat menekan maka proses uploading akan langsung dinyatakan gagal dan pesan kesalahan akan tampil.

maple007Gambar 9.

Proses instalasi STM32duino sendiri cukup mudah, menurut situs sumber [link];

  • Copy the Arduino_STM32 folder to the hardware folder in your Arduino sketches folder . If the hardware folder does not exist, please create one.
  • Run the udev rules installation script in tools/linux/install.sh
  • Note. If you are uploading via USB to Serial or STLink etc, you may need to set the relevant permissions for your specific upload device in order to be able to use it from within the Arduino IDE. You may also need to change the udev rules for the device in question.

Untuk pengujian cepat seperti ini maupun untuk prototyping,  fasilitas penggunaan bootloader dan penggunaan Arduino IDE sangatlah mempermudah. Selain itu sistem berbasis mikrokontroler STM32F103C8T6 (keluarga ARM® Cortex® -M3 32-bit) yang telah diberi Maple-bootloader (versi original) dan dapat diprogram dengan Arduino IDE ini juga menarik sebagai bahan belajar awal arsitektur mikrokontroler modern.

Adapun pin mapping dari Maple Mini ini dapat di lihat di link ini atau lebih lengkap lagi di link ini. Dokumentasi skematik dan pcb Maple Mini terdapat di GitHub.

Sumber belajar Maple Mini dari halaman lama LeafLabs dapat diakses di sini: LeafLabs Documentation Index.

 

Uji blinking led Tiva C Launchpad EK-TM4C123GXL di GNU Linux dengan Energia [teaser]

Papan  EK-TM4C123GXL adalah salah satu dari seri Launchpad yang dikeluarkan oleh Texas Instruments. Salah satu klaim yang menarik yang dikemukakan oleh TI adalah:

The Tiva C Series LaunchPad includes everything you need to get started with ARM Cortex-M4 development!<span class="su-quote-cite">Texas Instruments</span>

Papan ini berintikan prosesor TM4C123GH6PM yang memang dibangun dari arsitektur ARM tersebut. Lebih jauh diungkapkan bahwa:

The Tiva C Series TM4C123GH6PM microcontroller offers an 80-MHz, 32-bit ARM Cortex-M4 CPU with floating point, 256 kBytes of 100,000 write-erase cycles of flash memory, and a wide range of peripherals including motion control PWMs, 1-MSPS ADCs, eight UARTs, four SPIs, four I2Cs, USB H/D/OTG, and up to 27 timers. <span class="su-quote-cite">Texas Instruments</span>

wp-1470913436580.jpeg

Sistem ini dapat diprogram dengan beberapa cara. Salah satu dan yang termudah adalah dengan menggunakan Energia. Pada kali ini untuk sekedar mencoba melakukan uji led berkedip, maka saya menggunakan Energia di sistem GNU/Linux. Ini juga cara pertama yang akan saya tempuh untuk mempelajari sistem Tiva C.

 

Catatan sistem GNU/Linux:

$ uname -a
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

$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 17.2 Rafaela
Release: 17.2
Codename: rafaela

Sebagian dari $ lsusb
Bus 003 Device 004: ID 1cbe:00fd Luminary Micro Inc. In-Circuit Debug Interface

Sebagian dari $ dmesg
usb 3-1: new full-speed USB device number 4 using xhci_hcd
usb 3-1: New USB device found, idVendor=1cbe, idProduct=00fd
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-1: Product: In-Circuit Debug Interface
usb 3-1: Manufacturer: Texas Instruments
usb 3-1: SerialNumber: 0E21404E
acm 3-1:1.0: This device cannot do calls on its own. It is not a modem.
cdc_acm 3-1:1.0: ttyACM0: USB ACM device

 

Potensi masalah (tantangan):

Ada kemungkinan aplikasi Energia akan menampilkan pesan kesalahan saat akan melakukan pengiriman hasil kompilasi kode program ke papan Launchpad. Pesan yang pernah saya terima adalah sebagai berikut:
[intense_emphasis tag=”span”]

Unable to open USB device: LIBUSB_ERROR_ACCESS
Unable to find any ICDI devices
[/intense_emphasis]

Untuk mengatasi masalah tersebut saya menemukan solusinya dengan membaca dan mencoba beberapa alternatif solusi yang diajukan di sumber-sumber berikut:

wp-1470911952099.jpeg

Pada intinya permasalahan terjadi karena ada masalah akses ke jalur komunikasi. Indikasinya adalah jika saya menggunakan privilege sebagai root dengan menggunakan perintah sudo untuk menjalankan Energia, permasalahan akses tersebut tadi tidak lagi terjadi. Pengaturan rules pada udev perlu dilakukan sesuai contoh. Pada percobaan yang saya lakukan, perintah sudo restart udev tidak membawa pengaruh. Setelah konfigurasi pada file di /etc/udev/rules.d/, saya masih perlu melakukan restart pada sistem GNU/Linux saya. Demikianlah catatan tinkering kali ini. Di lain kesempatan saya upayakan catatan untuk compiler, IDE lain. Juga uji coba pada sistem Microsoft Windows.