Laporan Akhir




Percobaan 1
UART (STM-STM)


1. Prosedur
[Kembali]

1. Rangkai semua komponen pada breadboard yang terhubung ke mikrokontroler STM32.
2. Buat program untuk mikrokontroler STM32 di software STM32CubeIDE.
3. Inputkan program ke dalam mikrokontroler melalui USB STLINK.
4. Uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
5. Selesai.


2. Hardware dan Diagram Blok [Kembali]

Hardware :

    1. Mikrokontroler STM32F103C8
STM32F103C8 board – Microscale


    2. Resistor

Resistor 220 ohm – Pendidikan Teknik Elektronika
    3. Breadboard

BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 
    4. Push Button






    5. LED

Diagram Blok :




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :



Prinsip Kerja : 

Rangkaian pada gambar merupakan implementasi dari percobaan komunikasi UART antara dua mikrokontroler STM32F103C8T6. Tujuan dari percobaan ini adalah untuk menguji bagaimana data digital dapat dikirim dari satu board ke board lainnya menggunakan protokol komunikasi UART (Universal Asynchronous Receiver Transmitter). Dalam hal ini, satu board berfungsi sebagai pengirim (transmitter), sementara board lainnya berperan sebagai penerima (receiver).

Board pengirim terhubung ke empat buah push button berwarna (merah, hijau, biru, kuning) yang mewakili input digital. Setiap tombol terhubung ke pin GPIO dari STM32 dan akan dibaca statusnya secara berkala. Jika tombol ditekan, statusnya akan diubah menjadi karakter '1', dan jika tidak ditekan akan menjadi '0'. Keempat nilai ini dikemas dalam sebuah array karakter, lalu dikirim melalui jalur UART menggunakan pin TX dari STM32 pengirim ke pin RX pada STM32 penerima dengan kecepatan baudrate 9600.

Di sisi penerima, STM32 akan membaca data serial yang masuk dari UART. Setiap byte yang diterima akan digunakan untuk mengatur status dari empat buah LED yang terpasang. Logikanya, jika data yang diterima adalah '0', maka LED yang bersesuaian akan dinyalakan, dan jika '1', maka LED akan dimatikan. Ini merepresentasikan status dari tombol-tombol yang ditekan pada board pengirim.

Dengan cara ini, komunikasi antara dua board STM32 dapat dilakukan secara real-time, dan perubahan pada tombol langsung tercermin melalui nyala atau matinya LED pada board penerima. Percobaan ini menunjukkan bagaimana protokol UART dapat digunakan dalam sistem embedded untuk mentransfer data antar perangkat secara efisien tanpa memerlukan clock sinkronisasi, karena UART bekerja secara asinkron.


4. Flowchart dan Listing Program [Kembali]

Flowchart :


Listing Program :

Pada Tx

#include "main.h"


UART_HandleTypeDef huart1;

uint8_t buttonStates[4] = {'0', '0', '0', '0'};

uint8_t charToTransmit[5];


int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_USART1_UART_Init();


while (1)

{

buttonStates[0] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_SET) ? '1' : '0';

buttonStates[1] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2) == GPIO_PIN_SET) ? '1' : '0';

buttonStates[2] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) == GPIO_PIN_SET) ? '1' : '0';

buttonStates[3] = (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_SET) ? '1' : '0';


HAL_UART_Transmit(&huart1, buttonStates, 4, 100);

HAL_Delay(100);

}

}


void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}


RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK

| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}

}


static 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;

if (HAL_UART_Init(&huart1) != HAL_OK)

{

Error_Handler();

}

}


static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();


GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}


#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

}

#endif


Pada Rx

#include "main.h"


UART_HandleTypeDef huart1;

uint8_t receivedData[4];


void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);


int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_USART1_UART_Init();


while (1)

{

if(HAL_UART_Receive(&huart1, receivedData, 4, 100) == HAL_OK)

{

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, (receivedData[0] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, (receivedData[1] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, (receivedData[2] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, (receivedData[3] == '0') ? GPIO_PIN_SET : GPIO_PIN_RESET);


HAL_UART_Transmit(&huart1, receivedData, 4, 100);

}

HAL_Delay(50);

}

}


void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}


RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}

}


static 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;

if (HAL_UART_Init(&huart1) != HAL_OK)

{

Error_Handler();

}

}


static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();


HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET);


GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}

 


5. Video Demo [Kembali]



6. Analisa [Kembali]





7. Download File [Kembali]

Download HTML [Download]
Download Video Demo [Download]
Download Listing Program [Download]


Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH  MIKROPROSESOR DAN MIKROKONTROLER 2024 Nama   : Ichsan Aditia NIM : 221095 3 007 Dosen Pengamp...

Cari Blog Ini