Senin, 19 Mei 2025

Laporan Akhir M3

M3 - Laporan Akhir M3



1. Prosedur[Kembali]

Prosedur Percobaan 2 Kondisi 3

1. Buka software proteus

2. Cari Komponen yang akan digunakan sesuai dengan modul

3. Hubungka komponen sesuai dengan arahan yang ada pada modul dan untuk pin yang di pakai sesuaikan juga


4. Konfigurasi STM32 di STM32CubeIDE dan perbaiki code yang ada pada modul agar bisa  digunakan sesuai dengan kondisi yang di minta


5. build program yang telah di perbaiki tadi di software stm32cube

6. masukan file yang telah di ubah tadi pada stm32 yang telah di rangkai pada proteus

7. simulasikan dan lihat apa yang terjadi pada program

2. Hardware dan Diagram Blok[Kembali]

1.STM32F103C8

    sebagai mikrokontroler utama




2.LED 

    sebagai ouput atau keluaran nanti nya




3.Push Button
    
    sebagai Input




5.Resistor

    sebagai pengaman led agar tidak rusak karena arus lebih





3. Rangkaian Simulasi Dan Prinsip Kerja[Kembali]







Prinsip Kerja

    Pada rangkaian ini, dua buah board STM32 (kemungkinan STM32F103 "Blue Pill") saling berkomunikasi melalui UART. Mikrokontroler pertama (bagian atas) berperan sebagai pengirim (transmitter) yang membaca input dari tombol-tombol push button. Ketika salah satu tombol ditekan, mikrokontroler ini mengirimkan sinyal berupa data serial melalui pin TX ke mikrokontroler kedua (bagian bawah) yang berfungsi sebagai penerima (receiver). Mikrokontroler penerima akan membaca data yang masuk melalui pin RX dan kemudian mengaktifkan LED yang sesuai dengan tombol yang ditekan pada mikrokontroler pengirim. Setiap tombol mewakili LED tertentu sehingga komunikasi UART antar mikrokontroler ini memungkinkan kendali LED secara remote. Kedua mikrokontroler harus dikonfigurasi dengan baud rate dan pengaturan UART yang sama agar data dapat ditransmisikan dan diterima dengan benar. Rangkaian ini menunjukkan implementasi komunikasi UART antar STM32 dalam sistem kontrol digital sederhana dengan input (push button) dan output (LED) yang terpisah secara fisik.


4. Flowchart dan Listing[Kembali]




Listing Program

#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



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 Rangkaian Klik Disini

Download Vidio Demo Klik Disini

Download Datasheet Mikrokontroler STM32F103C8 Klik Disini

Download Datasheet Push Button Klik Disini

Download Datasheet Buzzer Klik Disini

Download Vidio Simulasi Klik Disini


Related Posts:

0 komentar:

Posting Komentar