Minggu, 06 Juli 2025

Penjelasan Singkat STM32 dan Cara Kerjanya

 

🔧 APA ITU STM32?

STM32 adalah keluarga mikrokontroler berbasis ARM Cortex-M yang dikembangkan oleh perusahaan STMicroelectronics. Mikrokontroler ini sangat populer di dunia embedded system karena:

  • Performa tinggi

  • Konsumsi daya rendah

  • Harga terjangkau

  • Banyak varian untuk berbagai kebutuhan

📦 STM32 dalam Berbagai Varian:

STM32 terbagi menjadi beberapa seri, antara lain:

Seri Cortex Kelebihan
STM32F1 M3 Umum dan serbaguna
STM32F4 M4 Performa tinggi dengan DSP
STM32L4 M4 Ultra low power
STM32G4 M4 Cocok untuk motor control
STM32H7 M7 Sangat tinggi performa

⚙️ BAGIAN UTAMA DALAM STM32

Setiap chip STM32 biasanya memiliki:

  1. CPU Core (ARM Cortex-M)

  2. Memori Flash (untuk menyimpan program)

  3. RAM

  4. GPIO (General Purpose Input Output)

  5. Timer

  6. ADC/DAC (Analog to Digital / Digital to Analog Converter)

  7. Komunikasi: USART, SPI, I2C, CAN, USB, dll.

  8. Peripheral tambahan: Watchdog, RTC, PWM, DMA, dll.


🔄 CARA KERJA STM32

1. Power ON

Ketika STM32 diberi daya, prosesor mulai dari alamat memori yang ditentukan dalam vector table.

2. Booting & Eksekusi

  • Bootloader bisa menjalankan firmware dari Flash, RAM, atau USB (tergantung konfigurasi pin BOOT).

  • CPU mengeksekusi instruksi dari Flash, satu per satu.

3. Loop Program

Program utama biasanya ada dalam loop (while(1)) yang terus berjalan selamanya. Semua logika dan kontrol sistem diletakkan di dalam loop ini.

int main(void){

  // Inisialisasi

  while(1){

    // Proses berulang (looping)

  }

}


4. Interupsi

STM32 mendukung interrupt: ketika ada event seperti tombol ditekan, sinyal komunikasi masuk, atau overflow timer, CPU bisa "lompat" ke fungsi khusus untuk menangani itu (ISR - Interrupt Service Routine).


🔌 CONTOH SIKLUS APLIKASI SEDERHANA

Misalnya: LED menyala-mati tiap 1 detik

  1. GPIO dikonfigurasi sebagai OUTPUT.

  2. Timer dikonfigurasi menghitung 1 detik.

  3. Dalam loop:

    • Set GPIO → LED menyala

    • Tunggu 1 detik (delay)

    • Reset GPIO → LED mati

    • Tunggu lagi


🧰 CARA MENGGUNAKAN STM32 (Alur Pengembangan)

1. Hardware:

  • Board STM32 (misalnya: STM32F103C8T6 “Blue Pill”)

  • Programmer/debugger (misalnya: ST-Link V2)

  • Kabel USB

  • Sensor/LED/buzzer, dll

2. Software (Tools):

  • STM32CubeIDE (resmi dari ST, untuk coding, build, dan debug)

  • STM32CubeMX (GUI untuk setup awal pin, clock, peripheral)

  • Compiler (GCC)

  • Flash tool (ST-Link Utility)

3. Langkah Pemrograman:

  1. Desain konfigurasi di STM32CubeMX

  2. Generate kode dasar

  3. Tambah program di main.c

  4. Kompilasi dan build project

  5. Flash ke board via ST-Link

  6. Debug dan uji langsung di board


📌 KELEBIHAN STM32

✅ Performa tinggi
✅ Banyak pilihan seri dan harga
✅ Komunitas besar
✅ Dukungan software resmi
✅ Cocok untuk industri dan hobi


📘 CONTOH PROYEK DENGAN STM32

  • Alat ukur suhu dengan sensor dan OLED

  • Kontrol motor servo dengan PWM

  • Sistem alarm dengan PIR sensor

  • Data logger dengan SD card

  • Komunikasi IoT via WiFi atau Bluetooth

 1. DIAGRAM BLOK STM32 (Umum)

Berikut diagram blok konseptual STM32 (misalnya STM32F1):

             +---------------------------+

             |        CPU (Cortex-M3)    |

             +---------------------------+

                       |        |

   +-------------------+        +--------------------+

   |                                          |

+----------+      +-----------+       +--------------+

|   FLASH  |      |    RAM    |       |   DMA        |

|  Memory  |      |  (Data)   |       | (Data mover) |

+----------+      +-----------+       +--------------+

   |                |                        |

   |                |                        |

   V                V                        V

+--------------------------------------------------+

| Peripherals:                                     |

| - GPIO (I/O)      - ADC / DAC                    |

| - Timer / PWM     - USART / UART / SPI / I2C     |

| - RTC / WDT       - NVIC (Interrupt Controller)  |

+--------------------------------------------------+

                      |

                      V

               Physical Pins (GPIO, Power, GND, dll)



💡 2. CONTOH PROGRAM STM32: LED BLINK

Berikut contoh kode C untuk menyalakan dan mematikan LED setiap 1 detik:

#include "stm32f1xx.h"  // Atau sesuai tipe STM32 yang dipakai


void delay_ms(uint32_t ms){

    for(uint32_t i=0; i<ms*8000; i++);  // Kasar (bisa diganti timer)

}


int main(void){

    // Aktifkan clock untuk GPIOC

    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;


    // Set PC13 sebagai output push-pull

    GPIOC->CRH &= ~GPIO_CRH_MODE13; // clear

    GPIOC->CRH |= GPIO_CRH_MODE13_0; // output 10 MHz

    GPIOC->CRH &= ~GPIO_CRH_CNF13;


    while(1){

        GPIOC->ODR ^= GPIO_ODR_ODR13;  // Toggle LED

        delay_ms(1000);

    }

}



📡 3. CONTOH KOMUNIKASI UART (USART)

Untuk mengirim data via USART1 (TX di PA9):

Inisialisasi USART1:

void USART1_Init(void) {
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
    
    // PA9 sebagai TX
    GPIOA->CRH &= ~GPIO_CRH_CNF9;
    GPIOA->CRH |= GPIO_CRH_CNF9_1; // Alternate function push-pull
    GPIOA->CRH |= GPIO_CRH_MODE9;  // Output 50 MHz

    USART1->BRR = 72000000 / 9600; // Baud rate 9600 (jika clock 72 MHz)
    USART1->CR1 |= USART_CR1_TE | USART_CR1_UE; // Enable TX dan USART
}

void USART1_SendChar(char c){
    while (!(USART1->SR & USART_SR_TXE));
    USART1->DR = c;
}

void USART1_SendString(char *str){
    while(*str){
        USART1_SendChar(*str++);
    }
}

Pemakaian di main():

int main(void){
    USART1_Init();
    while(1){
        USART1_SendString("Halo dari STM32!\r\n");
        delay_ms(1000);
    }
}


🌡️ 4. BACA SENSOR ANALOG (ADC)

Misalnya sensor suhu analog terhubung ke pin PA0 (ADC1 Channel 0):

Inisialisasi ADC:

void ADC_Init(void){
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_ADC1EN;

    // PA0 input analog
    GPIOA->CRL &= ~GPIO_CRL_MODE0;
    GPIOA->CRL &= ~GPIO_CRL_CNF0;

    ADC1->CR2 |= ADC_CR2_ADON;
    for(int i=0; i<10000; i++); // delay
    ADC1->CR2 |= ADC_CR2_ADON; // start calibration
}

Baca nilai ADC:

uint16_t ADC_Read(void){
    ADC1->SQR3 = 0; // Channel 0
    ADC1->CR2 |= ADC_CR2_SWSTART;
    while(!(ADC1->SR & ADC_SR_EOC));
    return ADC1->DR;
}

Di main():

int main(void){ ADC_Init(); USART1_Init(); char buffer[32]; while(1){ uint16_t adc_value = ADC_Read(); sprintf(buffer, "ADC = %d\r\n", adc_value); USART1_SendString(buffer); delay_ms(1000); } }

🛠️ 5. TOOLS YANG DIGUNAKAN

Tools Fungsi
STM32CubeIDE IDE resmi: code, build, flash
STM32CubeMX Setup konfigurasi chip dan pin
ST-Link V2 Programmer/debugger
USB-TTL Untuk koneksi UART ke PC
Serial Monitor (Putty, TeraTerm) Untuk lihat data UART

Tidak ada komentar:

Posting Komentar