Laporan Akhir Praktikum modul 3 Mikro





Laporan Akhir

Percobaan 1  UART (STM – STM)


1. Prosedur [kembali]

1. Rangkailah seluruh komponen percobaan 1 sesuai pada gambar
2. Buat lah Program lah STM32 yang pertama sebagai transmitter dari input push button
3. Kirimkan array karakter berisi status tombol melalui UART menggunakan fungsi HAL_UART_Transmit.
4. Buatlah program STM32 yang kedua sebagai receiver menggunakan HAL_UART_Receive. yang nanti di outputkan pada LED
5. inputkan semua program pada mikrokontroller STM32 dengan STlink
6. uji coba rangkaian
7. Selesai

2. Hardware dan Diagram Blok [kembali]

Hardware 
  • STM32F103C8


  • Breadboard




  • Jumper male to male


  • Push Button


  • LED Merah

Diagram Blok:




3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

  • Rangkaian Simulasi


  • Prinsip Kerja

Pada percobaan modul ini, dilakukan implementasi komunikasi serial UART (Universal Asynchronous Receiver Transmitter) antara dua mikrokontroler STM32. Kedua STM32 di hubungkan dengan pin-pin yang sama sehingga nanti bisa berkomunikasi. Salah satu STM32 berperan sebagai pemancar (transmitter) dan yang lainnya sebagai penerima (receiver). Komunikasi UART bersifat asinkron, artinya tidak memerlukan sinyal clock bersama, cukup dengan menyamakan baud rate dan parameter lain seperti jumlah bit data, bit parity, dan stop bit. Komunikasi dilakukan melalui pin TX dan RX, di mana pin TX STM pertama dihubungkan ke RX STM kedua.

Dalam percobaan, mikrokontroler pertama membaca status dari beberapa push button  yang terhubung ke GPIO, kemudian mengubah status tersebut ke dalam bentuk karakter ('0' atau '1') dan mengirimkannya secara serial melalui UART. Data dikirim setiap beberapa milidetik secara berulang menggunakan fungsi HAL_UART_Transmit. Sementara itu, mikrokontroler kedua menunggu dan membaca data yang diterima menggunakan fungsi HAL_UART_Receive. Setelah data diterima, mikrokontroler ini mengatur kondisi pin output untuk menyalakan atau mematikan LED sesuai data yang diterima, serta mengirimkan kembali data tersebut sebagai respon.

4. Flowchart dan Listing Program [kembali]

  • Flowchart



  • Listing Program

TX:

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.c

* @brief : Main program body

******************************************************************************

* @attention

*

* Copyright (c) 2025 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

******************************************************************************

*/

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/

#include "main.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/

UART_HandleTypeDef huart1;


/* USER CODE BEGIN PV */

uint8_t buttonStates[4] = {'0', '0', '0', '0'}; // Status awal: semua button tidak ditekan

/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);

/* USER CODE BEGIN PFP */


/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

uint8_t charToTransmit[5];

/* USER CODE END 0 */


/**

* @brief The application entry point.

* @retval int

*/

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_USART1_UART_Init();


while (1)

{

// Baca status push button (PA1-PA4) dengan pull-up

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

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

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

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


// Kirim data status tombol via UART

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


HAL_Delay(100); // Debouncing tombol (perlu menyesuaikan dengan aplikasi)

}

}


/**

* @brief System Clock Configuration

* @retval None

*/

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();

}

}


/**

* @brief USART1 Initialization Function

* @param None

* @retval None

*/

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();

}

}


/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();


// Mengonfigurasi tombol PA1-PA4 sebagai input dengan pull-up

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; // Pull-up untuk tombol

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}


#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

/* User can add his own implementation to report the file name and line number */

}

#endif



Rx:

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.c

* @brief : Main program body

******************************************************************************

* @attention

*

* Copyright (c) 2025 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

******************************************************************************

*/

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/

#include "main.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/

UART_HandleTypeDef huart1;


/* USER CODE BEGIN PV */

uint8_t receivedData[4]; // Menyimpan data yang diterima

/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART1_UART_Init(void);

/* USER CODE BEGIN PFP */


/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


/**

* @brief The application entry point.

* @retval int

*/

int main(void)

{


/* MCU Configuration--------------------------------------------------------*/

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_USART1_UART_Init();


/* Infinite loop */

while (1)

{

// Menerima data 4 byte (status button)

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

{

// Kontrol LED berdasarkan status tombol

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


// Kirim balik data sebagai verifikasi atau debug

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

}

HAL_Delay(50); // Delay untuk stabilitas komunikasi

}

}


/**

* @brief System Clock Configuration

* @retval None

*/

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();

}

}


/**

* @brief USART1 Initialization Function

* @param None

* @retval None

*/

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();

}

}


/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

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

}


/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}



5. Video Demo [kembali]



6. Analisa [kembali]




7. Download file [kembali]

Data sheet STM32 Download
Datasheet Resistor Download
Download Video Download
file HTML Download





Komentar

Postingan populer dari blog ini

Modul 2 Praktikum Sistem Digital

Modul 1 (GPIO) Praktikum Mikroprosesor dan Mikrokontroller

Modul 1 Praktikum Sistem Digital