Senin, 18 Mei 2020

Laporan Akhir Modul 3

 




1. Prosedur
[Kembali]

- Rangkaian


    Rangkaian ini terdiri dari STM32 yang terhubung ke tiga push button, Raspberry Pi Pico, dan LCD 16x2 I2C. STM32 digunakan untuk membaca input dari tombol dan mengirimkan data melalui komunikasi UART ke Raspberry Pi Pico. Pico kemudian menampilkan data tersebut ke LCD menggunakan komunikasi I2C. Tegangan 3.3V dan GND dibagikan ke seluruh komponen agar sistem dapat berjalan. Saat tombol ditekan, STM32 mengirimkan teks seperti “MERAH”, “HIJAU”, atau “BIRU” ke Pico, lalu Pico menampilkannya di layar LCD.

2. Hardware dan Diagram Blok [Kembali]

STM32F103C8 sebagai mikrokontroler utama untuk mengontrol input dari sensor dan output ke LED.




- Raspberry Pi Pico untuk menerima data dari STM32 dan menampilkannya ke LCD




Resistor pembatas arus sebagai resistor pull-down untuk button


- Push Button digunakan sebagai input manual



- LCD 16x2 I2C sebagai tampilan output





3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

- Rangkaian


- Prinsip kerja

Rangkaian ini bekerja dengan cara membaca input dari tombol menggunakan STM32. Ketika salah satu tombol ditekan, STM32 akan mengirimkan data berupa teks melalui komunikasi UART ke Raspberry Pi Pico. Pico kemudian menerima data tersebut dan mengolahnya. Setelah itu, Pico akan menampilkan informasi yang diterima ke LCD 16x2 menggunakan komunikasi I2C. Semua komponen mendapatkan suplai daya dari jalur yang sama, dan komunikasi antar mikrokontroler dilakukan secara serial.


4. Flowchart dan Listing Program [Kembali]

Flowchart :





Listing Program :

- STM32

#include "main.h"

#include <string.h>

UART_HandleTypeDef huart1;

// Fungsi prototipe

void SystemClock_Config(void);

void MX_GPIO_Init(void);

void MX_USART1_UART_Init(void);

// Fungsi kirim UART

void send_uart(char *text) {

HAL_UART_Transmit(&huart1, (uint8_t *)text, strlen(text), HAL_MAX_DELAY);

}

int main(void) {

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_USART1_UART_Init();

while (1) {

if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET) {

send_uart("MERAH\r\n");

HAL_Delay(300);

while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET);

} else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET) {

send_uart("HIJAU\r\n");

HAL_Delay(300);

while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET);

} else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET) {

send_uart("BIRU\r\n");

HAL_Delay(300);

while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET);

}

}

}

// Konfigurasi clock standar STM32F1

void SystemClock_Config(void) {

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

__HAL_RCC_AFIO_CLK_ENABLE();

__HAL_RCC_PWR_CLK_ENABLE();

__HAL_AFIO_REMAP_SWJ_NOJTAG(); // Bebaskan PB3-PB4

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;

HAL_RCC_OscConfig(&RCC_OscInitStruct);

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;

HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

}

// Inisialisasi UART1 (TX: PA9, RX: PA10)

void MX_USART1_UART_Init(void) {

huart1.Instance = USART1;

huart1.Init.BaudRate = 9600;

huart1.Init.WordLength = UART_WORDLENGTH_8B;

huart1.Init.StopBits = UART_STOPBITS_1;

huart1.Init.Parity = UART_PARITY_NONE;

huart1.Init.Mode = UART_MODE_TX_RX;

huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

huart1.Init.OverSampling = UART_OVERSAMPLING_16;

HAL_UART_Init(&huart1);

}

// Inisialisasi GPIO PB12, PB13, PB14 sebagai input pull-up

void MX_GPIO_Init(void) {

   GPIO_InitTypeDef GPIO_InitStruct = {0};

 

    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();

 

    // Konfigurasi input tombol dengan Pull-Up

    GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14;

    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

- Raspberry Pi Pico

from machine import I2C, Pin, UART

import utime

from pico_i2c_lcd import I2cLcd

 

# Inisialisasi UART

uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))

 

# Inisialisasi LCD I2C

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)

I2C_ADDR = 0x27  # Ganti dengan alamat LCD Anda

I2C_NUM_ROWS = 2

I2C_NUM_COLS = 16

lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)

 

# Tunggu LCD siap

utime.sleep_ms(100)

lcd.clear()

lcd.putstr("Menunggu input...")

 

def process_uart_data(data):

    try:

        decoded = data.decode('utf-8').strip()

        lcd.clear()

        if decoded == "MERAH":

            lcd.putstr("Warna: Merah")

        elif decoded == "HIJAU":

lcd.putstr("Warna: Hijau")

elif decoded == "BIRU":

lcd.putstr("Warna: Biru")

else:

lcd.putstr(f"Data: {decoded}")

except Exception as e:

lcd.clear()

lcd.putstr(f"Error: {str(e)}")

while True:

if uart.any():

data = uart.readline()

if data:

process_uart_data(data)

utime.sleep_ms(100)  # Beri sedikit jeda


5. Video Demo [Kembali]




6. Kondisi [Kembali]




7. Video Simulasi [Kembali]




8. Download File[Kembali]

File HTML [disini]
Datasheet Raspberry Pi Pico [disini]
Listing Program [disini]
Video [disini]
Datasheet STM32F103C8 [disini]

Datasheet LCD I2C 16x2 [disini]

TP M3 Praktikum Mikroprosesr dan Mikrokontroler 2025

 




1. Prosedur
[Kembali]

- Tugas Pendahuluan 

1. Jelaskan apa itu protokol komunikasi UART, SPI, dan I2C 

Jawab :

    UART (Universal Asynchronous Receiver Transmitter) adalah protokol komunikasi asinkron yang hanya menggunakan dua jalur, yaitu TX untuk mengirim data dan RX untuk menerima data, tanpa memerlukan sinyal clock eksternal. 

    SPI (Serial Peripheral Interface) adalah protokol sinkron yang lebih cepat, menggunakan empat jalur utama yaitu MOSI, MISO, SCLK, dan CS, dengan data dikirim dan diterima secara bersamaan menggunakan sinyal clock dari master. 

    I2C (Inter-Integrated Circuit) juga merupakan protokol sinkron, tetapi hanya menggunakan dua jalur yaitu SDA untuk data dan SCL untuk clock, serta memungkinkan komunikasi antara satu master dengan banyak slave menggunakan sistem alamat unik. Ketiga protokol ini memiliki kelebihan dan kekurangan masing-masing tergantung kebutuhan sistem, seperti kecepatan, jumlah perangkat yang terhubung, serta jumlah pin yang tersedia pada mikrokontroler.

2. Bagaimana konfigurasi komunikasi UART pada STM32 dan Raspberry Pipico secara hardware            (rangkaian) maupun software (program)

    Jawab :



    Konfigurasi komunikasi UART pada STM32 secara hardware dilakukan dengan menghubungkan pin TX dan RX dari mikrokontroler ke perangkat eksternal seperti modul USB-to-Serial atau mikrokontroler lain, di mana level tegangan harus sesuai (biasanya 3.3V). Pada STM32, pin TX dan RX dipetakan ke fungsi alternatif dari GPIO dan dihubungkan ke peripheral USART yang sudah disediakan oleh chip. Sementara pada Raspberry Pi Pico, konfigurasi hardware juga mengandalkan dua pin GPIO yang disetting sebagai TX dan RX, dengan level tegangan 3.3V juga, dan bisa dihubungkan ke PC melalui modul USB-Serial atau langsung ke perangkat lain. Secara software, konfigurasi UART pada STM32 dilakukan melalui STM32CubeMX untuk mengatur clock, pinout, baud rate, dan parameter lainnya, lalu kode program dihasilkan dan dikembangkan di STM32CubeIDE menggunakan pustaka HAL atau LL. Pengguna dapat menulis kode untuk mengirim dan menerima data menggunakan fungsi seperti HAL_UART_Transmit dan HAL_UART_Receive. 

    Sementara pada Raspberry Pi Pico, konfigurasi UART secara software bisa dilakukan menggunakan MicroPython dengan pustaka machine, di mana pengguna mendefinisikan objek UART, memilih nomor UART (seperti UART0), menetapkan TX dan RX ke GPIO tertentu, dan mengatur baud rate serta parameter lainnya sebelum menggunakan metode write dan read untuk berkomunikasi. Dalam bahasa C untuk Pico, pengguna menggunakan Pico SDK dan fungsi-fungsi seperti uart_init, uart_set_baudrate, gpio_set_function, dan uart_puts untuk mengirim data, serta uart_getc atau uart_is_readable untuk membaca data. Pada kedua platform, komunikasi UART biasanya juga dapat diperluas dengan fitur interrupt atau DMA agar lebih efisien dalam penanganan data.

3. Bagaimana konfigurasi komunikasi SPI pada STM32 dan Raspberry Pipico secara hardware                    (rangkaian) maupun software (program)
    Jawab :



    Konfigurasi komunikasi SPI pada STM32 secara hardware dilakukan dengan menghubungkan pin-pin SPI seperti SCK (clock), MOSI (Master Out Slave In), MISO (Master In Slave Out), dan CS (chip select) ke perangkat slave yang sesuai, dengan mempertimbangkan level tegangan yang kompatibel, umumnya 3.3V. Pin-pin ini diatur dalam mode alternatif (alternate function) dan dihubungkan ke peripheral SPI internal yang tersedia di dalam mikrokontroler STM32. Untuk Raspberry Pi Pico, konfigurasi hardware SPI juga melibatkan koneksi empat jalur utama ke perangkat slave, dengan pin-pin SPI seperti SCK, MOSI, MISO, dan CS yang dapat dipetakan ke berbagai GPIO sesuai fleksibilitas chip RP2040, tetap dengan tegangan 3.3V. 

    Secara software, pada STM32 konfigurasi SPI dapat dilakukan menggunakan STM32CubeMX untuk mengatur mode master/slave, frekuensi clock, CPOL/CPHA, ukuran data, dan pinout, lalu kode dihasilkan ke dalam STM32CubeIDE yang menggunakan pustaka HAL atau LL untuk pengembangan lebih lanjut. Fungsi-fungsi seperti HAL_SPI_Transmit, HAL_SPI_Receive, dan HAL_SPI_TransmitReceive digunakan untuk mentransfer data SPI. Sementara itu, pada Raspberry Pi Pico, konfigurasi SPI secara software dapat dilakukan dengan MicroPython menggunakan pustaka machine, di mana pengguna membuat objek SPI dengan menentukan SPI0 atau SPI1, memilih GPIO untuk SCK, MOSI, dan MISO, serta mengatur frekuensi clock, polaritas dan fase. Untuk pengiriman dan penerimaan data, digunakan metode seperti write, readinto, dan write_readinto. Dalam bahasa C menggunakan Pico SDK, pengguna dapat menginisialisasi SPI dengan spi_init, memilih fungsi pin dengan gpio_set_function, serta mengatur parameter SPI menggunakan spi_set_format, dan untuk komunikasi data digunakan fungsi spi_write_blocking atau spi_read_blocking. Baik pada STM32 maupun Raspberry Pi Pico, komunikasi SPI dapat ditingkatkan efisiensinya dengan penggunaan interrupt atau DMA, terutama untuk pengiriman data besar atau real-time.


4. Bagaimana konfigurasi komunikasi I2C pada STM32 dan Raspberry Pipico secara hardware                    (rangkaian) maupun software (program)
    Jawab :



    Konfigurasi komunikasi I2C pada STM32 secara hardware dilakukan dengan menghubungkan dua jalur utama yaitu SDA (data) dan SCL (clock) antara mikrokontroler dan perangkat slave seperti sensor atau EEPROM, dengan penambahan resistor pull-up eksternal (biasanya 4.7kΩ) pada kedua jalur ke tegangan 3.3V agar jalur dapat berfungsi sebagai open-drain. Pin SDA dan SCL pada STM32 dipetakan ke fungsi alternatif GPIO dan terhubung ke peripheral I2C internal yang dapat diatur sebagai master atau slave. Pada Raspberry Pi Pico, konfigurasi hardware I2C juga menggunakan dua pin GPIO yang disetting sebagai SDA dan SCL, terhubung ke perangkat slave dan disertai resistor pull-up, dengan dukungan hingga dua antarmuka I2C independen yaitu I2C0 dan I2C1. 

    Secara software, konfigurasi I2C pada STM32 dapat dilakukan melalui STM32CubeMX untuk memilih jalur I2C yang digunakan, mengatur alamat slave jika diperlukan, serta mengatur kecepatan komunikasi dan mode kerja, kemudian kode program dikembangkan di STM32CubeIDE menggunakan pustaka HAL atau LL. Fungsi-fungsi seperti HAL_I2C_Master_Transmit, HAL_I2C_Master_Receive, dan HAL_I2C_Mem_Read digunakan untuk mengakses data dari slave. Sementara itu, pada Raspberry Pi Pico, konfigurasi I2C secara software dapat dilakukan dengan MicroPython melalui pustaka machine, di mana pengguna membuat objek I2C, memilih antara I2C0 atau I2C1, menentukan GPIO yang digunakan untuk SDA dan SCL, serta mengatur frekuensi clock. Untuk membaca dan menulis data, digunakan metode seperti readfrom, writeto, dan scan untuk mendeteksi perangkat yang terhubung. Dalam bahasa C menggunakan Pico SDK, pengguna menginisialisasi I2C dengan i2c_init, mengatur fungsi pin dengan gpio_set_function, menambahkan pull-up internal jika diperlukan, dan menggunakan fungsi seperti i2c_write_blocking dan i2c_read_blocking untuk komunikasi. Baik pada STM32 maupun Raspberry Pi Pico, protokol I2C mengatur sinkronisasi data melalui sinyal clock dan alamat slave, serta dapat mendukung komunikasi dengan banyak perangkat hanya dengan dua jalur.


2. Hardware dan Diagram Blok [Kembali]



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]



4. Flowchart dan Listing Program [Kembali]

 

5. Video Demo [Kembali]



6. Kondisi [Kembali]



7. Video Simulasi [Kembali]



8. Download File[Kembali]

MODUL 3 COMMUNICATION

 



1. Tujuan [Kembali]

  1. Memahami cara penggunaan protokol komunikasi UART, SPI, dan I2C pada Development Board yang digunakan 
  2. Memahami cara penggunaan komponen input dan output yang berkomunikasi secara UART, SPI, dan I2C pada Development Board yang digunakan 
2. Alat dan Bahan [Kembali]


  1. Raspberry Pi Pico 
  2. STM32F103C8 
  3. LED 
  4. Push Button 
  5. LED RGB 
  6. Touch Sensor 
  7. LCD I2C 16 x 2 
  8. Potensiometer 
  9. Mq-2 
  10. LCD OLED 
  11. Motor Servo 

 
3. Dasar Teori [Kembali]

  1.  UART (Universal Asynchronous Receiver Transmitter)
    UART (Universal Asynchronous Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port serial perangkat periperal.

Cara kerja komunikasi UART


Data dikirimkan secara paralel dari data bus ke UART1. Pada UART1 ditambahkan start bit, parity bit, dan stop bit kemudian dimuat dalam satu paket data. Paket data ditransmisikan secara serial dari Tx UART1 ke Rx UART2. UART2 mengkonversikan data dan menghapus bit tambahan, kemudia di transfer secara parallel ke data bus penerima.

    2.  I2C (Inter-Integrated Circuit)

    Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.

Cara kerja komunikasi I2C


    Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop. Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL. Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL. R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave) ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver. 


3. SPI (Serial Peripheral Interface)

    Serial Peripheral Interface (SPI) merupakan salah satu mode komunikasi serial synchronous berkecepatan tinggi yang dimiliki oleh STM32F407VGT6 dan Raspberry Pi Pico. Komunikasi SPI membutuhkan 3 jalur utama yaitu MOSI, MISO, dan SCK, serta jalur tambahan SS/CS. Melalui komunikasi ini, data dapat saling dikirimkan baik antara mikrokontroler maupun antara mikrokontroler dengan perangkat periferal lainnya. • MOSI (Master Output Slave Input) Jika dikonfigurasi sebagai master, maka pin MOSI berfungsi sebagai output. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin MOSI berfungsi sebagai input. • MISO (Master Input Slave Output) Jika dikonfigurasi sebagai master, maka pin MISO berfungsi sebagai input. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin MISO berfungsi sebagai output. • SCLK (Serial Clock) Jika dikonfigurasi sebagai master, maka pin SCLK bertindak sebagai output untuk memberikan sinyal clock ke slave. Sebaliknya, jika dikonfigurasi sebagai slave, maka pin SCLK berfungsi sebagai input untuk menerima sinyal clock dari master. • SS/CS (Slave Select/Chip Select) Jalur ini digunakan oleh master untuk memilih slave yang akan dikomunikasikan. Pin SS/CS harus dalam keadaan aktif (umumnya logika rendah) agar komunikasi dengan slave dapat berlangsung.

Cara kerja komunikasi SPI




Sinyal clock dialirkan dari master ke slave yang berfungsi untuk sinkronisasi. Master dapat memilih slave mana yang akan dikirimkan data melalui slave select, kemudian data dikirimkan dari master ke slave melalui MOSI. Jika master butuh respon data maka slave akan mentransfer data ke master melalui MISO. 

  4.  Raspberry Pi Pico

    Raspberry Pi Pico adalah papan rangkaian elektronik yang di dalamnya terdapat komponen utama chip mikrokontroler RP2040, yang dirancang dan diproduksi oleh Raspberry Pi Foundatio. Tidak seperti komputer mini raspberry Pi lainnya yang menjalankan sistem operasi seperti Linux, Pico dirancang untuk tugas-tugas yang lebih sederhana dan langsung (embedded system), seperti membaca sensor, mengontrol perangkat, atau melakukan pengolahan data pada tingkat hardware. Adapun spesifikasi dari Raspberry Pi Pico adalah sebagai berikut: 




5. STM32103C8

    STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut: 




 4. Bagian - bagian Pendukung

1) Raspberry Pi Pico 

1. RAM (Random Access Memory) Raspberry Pi Pico dilengkapi dengan 264KB SRAM on-chip. Kapasitas RAM yang lebih besar ini memungkinkan Pico menjalankan aplikasi yang lebih kompleks dan menyimpan data lebih banyak. 

2. Memori Flash Eksternal Raspberry Pi Pico tidak memiliki ROM tradisional. Sebagai gantinya, ia menggunakan memori flash eksternal. Kapasitas memori flash ini dapat bervariasi, umumnya antara 2MB hingga 16MB, tergantung pada konfigurasi. Memori flash ini digunakan untuk menyimpan firmware dan program pengguna. Penggunaan memori flash eksternal pada Pico memberikan fleksibilitas lebih besar dalam hal kapasitas penyimpanan program. 

3. Crystal Oscillator Raspberry Pi Pico menggunakan crystal oscillator untuk menghasilkan sinyal clock yang stabil. Sinyal clock ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya. 

4. Regulator Tegangan Untuk memastikan pasokan tegangan yang stabil ke mikrokontroler. 

5. Pin GPIO (General Purpose Input/Output): Untuk menghubungkan Pico ke berbagai perangkat eksternal seperti sensor, motor, dan LED. 

2) STM32 

1. RAM (Random Access Memory) STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program. 

2. Memori Flash Internal STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal. 

3. Crystal Oscillator STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya. 

4. Regulator Tegangan STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V. 

5. Pin GPIO (General Purpose Input/Output) STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.