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.