
Bismillahirrahmaanirrahiim.
Saat ini, mungkin hampir semua orang sudah mendengar istilah "ARM". Arsitektur processor 32 bit ini merupakan arsitektur yang saat ini paling banyak digunakan. Mulai dari smartphone, tablet, embedded system seperti RaspberryPi dan semacamnya, dan tentunya mikrokontroler. Selain memiliki banyak sekali fitur, ARM juga sangat rendah daya. Dan yang paling menarik, harganya yang cukup murah.
Saya yang selama ini terbiasa menggunakan AVR sebagai mikrokontroller andalan, perlahan telah mulai memberanikan diri untuk 'hijrah'.
Di sini, saya ingin berbagi catatan mengenai pemrograman salah satu mikrokontroler berbasis ARM. yaitu STM32. Semoga di post-post berikutnya, saya bisa menjelaskan beragam fitur-fiturnya secara bertahap. Tentunya lebih berfokus pada contoh aplikasinya.
Sebagai catatan, disini saya menggunakan OS Ubuntu (Linux). Namun umumnya untuk pengguna OS lain, pada dasarnya langkah-langkah yang digunakan atau apa saja yang perlu di install adalah sama. Perbedaannya hanya pada prosedur instalasinya saja.
Baiklah, kita mulai.
Persiapan Hardware
Pertama, mikrokontroler STM32F103. Atau biasa dikenal dengan istilah "Blue pill".Kedua ST-Link V2, perangkat ini digunakan untuk melakukan flashing program yang telah kita buat ke flash memory (atau istilah di Arduino : Upload). Fungsinya serupa dengan "downloader" USBASP untuk mikrokontroler AVR. Namun dengan ST-Link, kita juga bisa sekaligus melakukan debugging.
Ketiga, rangkai stm32f103 dengan STLink-v2 dengan konfigurasi seperti berikut ini (klik gambar untuk memperbesar) :
Setup Environment
Di bagian ini kita akan menyiapkan environtment untuk dapat melakukan pemrograman, kompilasi, hingga flashing.Pertama, buka terminal dan install make. Make digunakan untuk eksekusi perintah kompilasi.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo apt-get install make |
Setelah instalasi selesai, Coba masukan perintah "make" lalu tekan enter. Seharusnya akan muncul pesan seperti ini :
Untuk dapat melakukan kompilasi program ARM, kita memerlukan compiler gcc-arm-none-eabi, dengan menginstall toolchain ARM dibawah ini :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa | |
sudo apt-get update | |
sudo apt-get install gcc-arm-none-eabi |
Selanjutnya, kita akan menginstall program untuk bisa menggunakan ST-Link. Sebelumnya, install dependencies berikut ini :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo apt-get install git build-essential libusb-1.0.0-dev cmake |
Lalu kita akan build ST-Link binaries dengan download (cloning) source dari git. Disini saya mendownloadnya ke direktori $HOME, jika ingin direktori lain silahkan sesuaikan dengan kebutuhan.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd $HOME | |
git clone https://github.com/texane/stlink stlink | |
cd stlink | |
make release | |
cd build/Release && make install DESTDIR=_install | |
echo "export PATH=\$PATH:$HOME/stlink/build/Release/_install/usr/local/bin" >> $HOME/.bashrc | |
echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$HOME/stlink/build/Release/_install/usr/local/lib" >> $HOME/.bashrc | |
sudo cp st-flash /usr/bin |
Jika semua perintah diatas telah dilakukan, coba masukkan perintah "st-flash". Jika ST-Link sudah terinstall dengan benar, maka akan muncul pesan seperti di bawah ini :
Selanjutnya, kita akan membuat USB rule agar ST-Link dapat diakses tanpa perlu menggunakan "sudo". Perintah dibawah akan membuka editor teks Nano.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd /etc/udev/rules.d/ | |
sudo nano 50-usb-stlink.rules |
Copy-paste script berikut ini ke dalam editor Nano :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#STLINK V2 and V2.1 | |
ATTRS{idProduct}=="3748", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev" |
*) Opsi: jika anda menggunakan selain ST-Link V2, bisa pilih salah satu dari list dibawah ini :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#FT232 | |
ATTRS{idProduct}=="6014", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev" | |
#FT2232 | |
ATTRS{idProduct}=="6010", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev" | |
#FT230X | |
ATTRS{idProduct}=="6015", ATTRS{idVendor}=="0403", MODE="666", GROUP="plugdev" | |
#STLINK V1 | |
ATTRS{idProduct}=="3744", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev" |
Save dan Exit, lalu restart USB service.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo service udev restart |
Terakhir, download Standard Peripherals dibawah dan ekstrak di direktori yang diinginkan.
STDPeriphLib
Sampai tahap ini, environment untuk programming STM32 telah siap.
Testing Program
Setelah menyiapkan environment, sekarang saatnya kita mulai memprogram!
Buka editor teks yang biasa kamu gunakan. Kemudian buat program seperti berikut ini dan simpan sebagai "main.c".
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "stm32f10x.h" | |
void delay(uint16_t millis); | |
int main() | |
{ | |
GPIO_InitTypeDef GPIO_InitStructure; | |
/* GPIOC Periph clock enable */ | |
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); | |
/* Configure PD0 and PD2 in output pushpull mode */ | |
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; | |
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; | |
GPIO_Init(GPIOC, &GPIO_InitStructure); | |
while (1) | |
{ | |
/* Set PD13*/ | |
GPIOC->BSRR = GPIO_Pin_13; | |
delay(500); | |
/* Reset PD13 */ | |
GPIOC->BRR = GPIO_Pin_13; | |
delay(500); | |
} | |
} | |
void delay(uint16_t millis) | |
{ | |
while (millis-- > 0) | |
{ | |
volatile int16_t x = 5971; | |
while (x-- > 0) | |
{ | |
__asm("nop"); | |
} | |
} | |
} |
Program diatas merupakan testing program atau bisa dibilang sebagai "Hello World"-nya mikrokontroler, yaitu blinking LED. Di module STM32F103 "Blue Pill" kita bisa memanfaatkan LED yang sudah built-in di pin PC13, lalu kita set dan reset dengan jeda 500ms.
Setelah itu, buat file konfigurasi kompilasi dibawah ini. Ubah direktori STD_PERIPH_LIBS dengan path direktori STDPeriphLib yang sudah di download sebelumnya. Simpan dengan nama "makefile", di folder yang sama dengan "main.c".
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# path menuju direktori STM32F103 standard peripheral library | |
STD_PERIPH_LIBS ?= ./STM32F10x_StdPeriph_Lib_V3.5.0/ | |
# list of source files | |
SOURCES = main.c | |
SOURCES += $(STD_PERIPH_LIBS)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c | |
SOURCES += $(STD_PERIPH_LIBS)/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c | |
SOURCES += $(STD_PERIPH_LIBS)/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c | |
SOURCES += $(STD_PERIPH_LIBS)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/TrueSTUDIO/startup_stm32f10x_md.s | |
# name for output binary files | |
PROJECT ?= main | |
# compiler, objcopy (should be in PATH) | |
CC = arm-none-eabi-gcc | |
OBJCOPY = arm-none-eabi-objcopy | |
# path to st-flash (or should be specified in PATH) | |
ST_FLASH ?= st-flash | |
# specify compiler flags | |
CFLAGS = -g -O2 -Wall | |
CFLAGS += -T$(STD_PERIPH_LIBS)/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210B-EVAL/stm32_flash.ld | |
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork | |
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 | |
CFLAGS += -DSTM32F10X_MD -DUSE_STDPERIPH_DRIVER | |
CFLAGS += -Wl,--gc-sections | |
CFLAGS += -I. | |
CFLAGS += -I$(STD_PERIPH_LIBS)/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/ | |
CFLAGS += -I$(STD_PERIPH_LIBS)/Libraries/CMSIS/CM3/CoreSupport | |
CFLAGS += -I$(STD_PERIPH_LIBS)/Libraries/STM32F10x_StdPeriph_Driver/inc | |
OBJS = $(SOURCES:.c=.o) | |
all: $(PROJECT).elf | |
# compile | |
$(PROJECT).elf: $(SOURCES) | |
$(CC) $(CFLAGS) $^ -o $@ | |
$(OBJCOPY) -O ihex $(PROJECT).elf $(PROJECT).hex | |
$(OBJCOPY) -O binary $(PROJECT).elf $(PROJECT).bin | |
# remove binary files | |
clean: | |
rm -f *.o *.elf *.hex *.bin | |
# upload program | |
flash: | |
sudo $(ST_FLASH) write $(PROJECT).bin 0x8000000 |
Setelah itu, lakukan kompilasi dan flash dengan perintah :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
make all && make flash |
Dengan program tersebut, led di pin PC13 akan berkedip setiap 500ms.
Selamat, pemrograman STM32 telah sukses.
Penutup
Dalam library STD Periph diatas, terdapat berbagai program contoh yang dapat kita jadikan referensi. Jadi, jangan ragu untuk mencoba !Tutorial diatas dibuat bersasarkan informasi dari berbagai sumber dengan penyesuaian saya sendiri. Jika ada yang perlu didiskusikan, silahkan komen dibawah.
Feel free to discuss | Berikan tanggapanmu!
Posting Komentar