Bare Metal STM32 – CMSIS

CMSIS : Common Microcontroller Software Interface Standard.

“Bare metal” : program yang bisa jalan tanpa OS di perangkat keras. Misal buat script “blink led” di Arduino. Jika buat program “blink led” di Raspberry Pi yang sudah Ada OS nya, maka ini tidak masuk kategori “bare metal”.

Tapi ada definisi “bare metal” lainnya. Jika di chip STM32 Anda mengabaikan HAL & LL atau firmware lainnya seperti libopencm3, dan SPL maka Anda melakukan pemrograman ala “bare metal”. Tanpa library apapun. Mulai dari nol! (Tapi tidak mungkin tanpa kopi wkwkwk).

Lha kalau pakai CMSIS termasuk mana? Ada yang menyebut masuk “bare metal” Ada yang menyebut masuk “chocolate bar” lol. Bercanda!

Jika rancang bangun dengan mikrokontroler STM32 ingin langsung berurusan dengan register, maka lebih baik pakai framework CMSIS.

Daripada memberi nama sendiri tiap register, pakai standard CMSIS saja agar mudah diterima di mana-mana. Apalagi Anda ingin terlihat sebagai pemain PRO!

CMSIS tidak lebih dari penamaan register standar. Standar dari yang punya paten IP (Intelectual Property) chip ARM. Untuk apa membuat lagi? Apalagi beda nama. Misal, MODER agar keren diganti MODE_REG misalnya. Nanti tetangga Anda bisa gagal paham.
Header file CMSIS bisa didapat dari STM32CubeIDE atau github. Ini  CMSIS untuk stm32f411
TIM2 misalnya kalau pakai nama Timer2 (selama address memory sama)boleh saja, tapi ini tidak sesuai aturan penamaan CMSIS. Sedangkan CMSIS menaungi semua chip ARM. Jeroan chip terkait procesor, interupt, timer ARM yang buat. Sedang untuk peripheral sperti GPIO, I2C, SPI, dan lainnya,  ST sendiri yang buat sesuai standar CMSIS. Ada aturan baku mengenai penamaan peripheral. Sebagai contoh, untuk register inti ditulis huruf besar semua. Mengikuti aturan CMSIS akan mempermudah saat beralih dari satu chip ke chip lain apalagi lain manufaktur.

Beberapa contoh terkait CMSIS :

Semisal ingin konfigurasi GPIOA pin PA3 sebagai output. Maka bagian MODER3[1:0] bernilai 0 1.

Tiga baris program di bawah ini sama semua fungsinya. Pilih satu saja. Intinya melakukan set bit ke-6 dari MODER.

GPIOA->MODER |= (1<<6);
GPIOA->MODER |= (1<<(3<<1));
GPIOA->MODER |= GPIO_MODER_MODER3_0;

Terus bagaimana dengan baris ke-3  GPIO_MODER_MODER3_0? Apakah sudah didefinisikan?

Jika melihat isi header file CMSIS, maka GPIO_MODER_MODER3_0 sama dengan (1<<6).   Konfigurasi ini sudah didefinisikan di CMSIS. Mau dipakai atau tidak terserah.

Nama GPIOA, MODER, GPIO_MODER3_0 adalah penamaan standar di CMSIS. Silahkan cek di file CMSIS.

Contoh lain : Jika ingin PA3  sebagai input analog, maka nilai MODER3[1 0]>adalah 1 1.

GPIOA->MODER |= (3<<6);

Atau boleh juga seperti di bawah :


GPIOA->MODER |= (3<<(3<<1));

Jika diurutkan, (3<<1) bernilai 6. Maka (3<<(3<<1))  sama dengan (3<<6).

Atau seperti di bawah oke juga :

GPIOA->MODER |= GPIO_MODER_MODER3;

Pada file header CMSIS, GPIO_MODER_MODER3 kalau diruntut ya sama dengan set bit (3<<6). Jika kurang kerjaan, boleh juga seperti di bawah :

GPIOA->MODER |= GPIO_MODER_MODER3_1;
GPIOA->MODER |= GPIO_MODER_MODER3_0;

Boleh juga :


GPIOA->MODER |= GPIO_MODER_MODER3_1|GPIO_MODER_MODER3_0;

Intinya semua sama.. Nilai MODER3[1 0] adalah 1 1 agar PA3 berfungsi sebagai input analog.

Jika nama seperti GPIOA  diganti PORTA, MODER diganti MODERAINA_CANTIK, jika tidak didefinisikan ulang sesuai CMSIS, maka aturan main dilanggar. Jika ingin, definisikan ulang sesuai CMSIS. #define PORTA GPIOA, #define MODERAINA_CANTIK MODER.

Baiklah, semoga ada gambaran mengenai CMSIS dan penamaan register.

Melihat data sheet, reference manual, dan CMSIS ibarat makan Mie pakai sumpit atau garpu. Seirama! (kalau pakai sendok agak susah). Nama register tiap peripheral akan sama satu sama lain.

Jika Anda menggunakan HAL dan masih kangen mainan register langsung, maka otak akan 2x kerja mencocokkan apa yang dilakukan oleh HAL terkait register. HAL punya penamaan sendiri untuk library. Dan fungsi HAL agar persoalan register semakin dilupakan. Beda filosofi.

Saat melakukan debug, penggunaan CMSIS juga “to the point” tidak muter kemana-mana.

Pertanyaan akhir… Apakah CMSIS termasuk “bare metal”? Silahkan jawab sendiri :).

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s