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.