🍕 Setup GCC - Eclipse Untuk STM32

STM32GCCECLIPSEHARDWAREELEKTRONIKA

Setup GCC & Eclipse Untuk STM32

Kenapa STM32

Dari sudut pandang saya yang semula banyak menggunakan 8051 ada beberapa alasan untuk memakai mikrokontroler berprosesor ARM, Cortex-M3 atau Cortex-M4:

  • Kecepatan

    Cortex-M3 mempunyai benchmark 1.25DMIPS/MHz pada clock 135Mhz. Sederhananya prosesor ini mampu menjalankan program yang besar dengan waktu yang relatif cepat.

  • Memori Lebih Besar

    Cortex-M3 adalah prosesor 32 bit, termasuk 32 bit alamat dan data, artinya bisa mengakses sebesar 4GB memori dan kalau dibagi bagi memungkinkan pemakaian RAM sebesar 2GB.

  • Alat Pengembangan Modern

    Seluruh aplikasi yang ditargetkan memakai prosesor Cortex-M3 ataupun Cortex-M4 bisa sepenuhnya dibangun memakai bahasa C yang jauh lebih portabel dibandingkan jika memakai Assembly murni dan dukungan alat pengembangan untuk bahasa C-pun sangat banyak, ada Keil, GCC plus Eclipse dll.

    Selain karena alasan diatas itu sebenarnya kemudahan mendapatkan mikrokontroler ber-prosesor ARM dengan harga yang relatif terjangkau yang membuat praktisi elektronika lebih cepat mengadopsi harwadre satu ini.

    Silahkan lihat Application Note 237 Migrating from 8051 to Cortex Microcontrollers] untuk melihat kenapa harus upgrade 8051 ke ARM.

STM32 NUCLEO-F401RE

Saya mendapatkan papan pengembangan ini di tahun 2017 dengan harga sekitar 250-ribuan dan jauh lebih murah daripada harga Arduino Uno (ATMega328P) saat itu tetapi papan ini mempunyai prosesor Cortex-M4 yang jauh lebih superior.

Nucleo-F401RE tertanam mikrokontroler STM32Ff01RE, seperti halnya 8051, papan ini juga membutuhkan alat pemrogram hanya saja pada papan ini alat pemrogram sudah menjadi satu papan sehingga tidak diperlukan alat pemrogram tambahan, artinya anda bisa langung menghubungkan papan Nucleo langsung ke komputer.

Pemrogram untuk STM32 dinamakan ST-LINK.

Nucleo-f401re-laptop

Driver & Update Firmware

Sebelum memprogram papan, instal dahulu driver untuk OS, saya pakai Windows 10.

Download driver STSW-LINK009 dan selalu update software bawaan dari ST-LINK atau firmware memakai ST-LINK Upgrade.

ST-LINK-Upgrade

ST-Link Utility

Install juga GUI pemrogram ST-LINK Utility [STSW-LINK004] yang sangat memudahkan dalam mengupload hasil kompilasi ke hardware.

ST-LINK Utility

GNU ARM

GNU Embedded Toolchain untuk ARM yang isinya adalah tool dan compiler untuk C, C++ dan Assembly yang ditargetkan untuk prosesor Cortex-M dan Cortex-R, toolchain ini gratis dan tersedia untuk Windows, Linux maupun macOS.

Saya memakai versi gcc-arm-none-eabi-8-2019-q3-update-win32 ditulisan ini dan mengekstrak-nya ke path C:\

C:\STM32ToolChain\gnu-arm

Selain compiler GCC ARM ada juga compiler keluaran dari ARM yaitu ARM Compiler 6 yang didukung langsung oleh IDE Keil uVision maupun ARM Development Studio hanya saja kedua editor terakhir ini tidak gratis, jadi saya sarankan kalau pertama kali anda memprogram hardware coba dulu yang gratis seperti Eclipse.

Eclipse & Plugin GNU ARM

Sebenarnya tidak harus memakai IDE untuk menulis program, aslinya anda bisa hanya dengan memakai Notepad++ dan meng-compile program secara manual, hanya saja akan ribet kalau anda masih awam di pemrograman hardware.

Disini saya memakai Eclipse IDE C/C++ dengan plugin GNU ARM.

eclipse

Pastikan anda menginstal plugin melalui menu HelpInstall New Software

plugin

GNU MCU Eclipse Windows Build Tools

Windows tidak memiliki tools untuk build seperti halnya pada OS Linux dimana GCC umumnya dipakai sehingga anda perlu mendownload tools tersebut. Build Tools ini menyediakan utilitas seperti make, rm, sh dll.

Download tools di Github, saya memakai versi 32bit, dan kemudian ekstrak di C:\

C:\STM32ToolChain\build-tools

STM32CubeMX

Ok, memang langkah setup lumayan banyak hanya untuk bisa mengkompilasi program C untuk ARM, kalau ingin lebih mudah anda bisa melihat platform mbed.

Dibandingkan dengan 8051 dimana program yang diciptakan tidaklah portabel, pada STM32 keragaman device yang ada diatasi dengan tool yang bernama STM32CubeMX yang pada dasarnya adalah software untuk inisialisasi hardware yang mana sangat configurable.

Misalnya jika anda membangun aplikasi untuk STM32F401RE dan ingin mengupgrade ke STM32F7xx maka dengan STM32CubeMX anda dapat menyesuaikan pinout dan men-generate ulang kode inisialisasi agar sesuai dengan clock STM32F7xx yang baru.

Test Project

Ada banyak pintu untuk belajar, dalam hal ini dimulai secara umum artinya tidak perlu mengenal terlalu detil dahulu mengenai internal dari STM32F401RE.

Buat project memakai Eclipse melalui menu NewC Project, jangan lupa memilih board yang tepat

1

Pilih template Blinky bawaan dari plugin GNU ARM.

1

Kalau anda mengkompilasi project template Blinky melalui menu ProjectBuild All tetapi muncul error tidak mengenali command make maka anda perlu men-setup path toolchain agar Eclipse mengenali compiler GCC ARM dan Build Tools.

Eclipse Setup

Pada langkah ini kompilasi akan sukses hanya saja saya yakin kalau LED di papan Nucleo-F401RE tidak akan kedap - kedip sebagaimana program yang ditulis karena template bawaan Eclipse tidak dirancang untuk papan ini sehingga anda harus mengkonfigurasi ulang, nah disinilah kita memerlukan STM32CubeMX.

Sebagaimana anda lihat ada 1 LED (LD2, LED Hijau) untuk user dan 1 Button (B1, Biru) untuk user (Link)

LED & Button

Set LED ke 1 kemudian Start Project.

Konfigurasi Pin digambarkan seperti pada screenshot dibawah

Pinout

  • PA_5 merupakan pin dimana LED Hijau terhubung

Simpan project dan kemudian Generate Code

Pinout

Kode yang digenerate oleh STM32CubeMX yang kita ambil adalah konfigurasi System Clock di metode SystemClock_Config(void)

  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 16;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }

Copy paste kode hasil STM32CubeMX seperti diatas dan ganti kode pada fungsi SystemClock_Config(void) di file _initialize_hardware.c

Langkah berikutnya ubah konfigurasi hardware pada saat inisialisasi di file inlude/BlinkLed.h

#define BLINK_PORT_NUMBER               (0)
#define BLINK_PIN_NUMBER                (5)
#define BLINK_ACTIVE_LOW                (0)

Kalau setup sudah benar maka kompilasi kembali kode LED Kedap Kedip.

Eclipse Build

kemudian anda tinggal mengupload kode hasil kompilasi ke papan Nucleo-F401RE memakai ST-Link Utility seperti dijelaskan sebelumnya.

Tautan

Beberapa tautan untuk menelusuri papan Nucleo-F401RE lebih lanjut.


Equan Pr.

Equan Pr. (@junwatu)