LA M3 : COMMUNICATION





1. Prosedur [kembali]

1. STM32 Pengirim (Bagian Atas pada gambar)

  • Push button dihubungkan ke pin PA0–PA3.

  • Gunakan resistor pull-down 10kΩ agar pin tidak floating saat tombol dilepas.

  • Pin TX (PA9) dihubungkan ke pin RX STM32 penerima.

2. STM32 Penerima (Bagian Bawah)

  • LED dihubungkan ke pin output GPIO (misal PB0–PB3) melalui resistor 220Ω.

  • Pin RX (PA10) dihubungkan ke TX STM32 pengirim.

langkah program:

1. STM32 Pengirim

  • Inisialisasi GPIO untuk tombol input.

  • Inisialisasi UART 

  • Dalam loop utama:

    • Periksa status tombol.

    • Jika tombol 1 ditekan, kirim karakter ‘1’.

    • Jika tombol 2 ditekan, kirim karakter ‘2’, dst.

    • Jika tidak ditekan, kirim karakter ‘0’ atau tidak mengirim sama sekali.

2. STM32 Penerima

  • Inisialisasi UART dengan konfigurasi yang sama.

  • Inisialisasi GPIO untuk LED sebagai output.

  • Dalam loop utama:

    • Baca data UART.

    • Jika menerima ‘1’, nyalakan LED1.

    • Jika ‘2’, nyalakan LED2, dst.

    • Jika ‘0’, matikan semua LED.

2. Hardware dan Diagram Blok [kembali]
1. stm32

2. push button


3. resistor


4. led


5. jumper


6. breadborad



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

prinsip kerja:

Percobaan ini mendemonstrasikan komunikasi serial UART antara dua mikrokontroler STM32 Blue Pill. Tujuannya adalah mentransfer data berupa status tombol dari STM32 pengirim ke STM32 penerima untuk mengontrol kondisi LED.

Alur Kerja:

  1. STM32 Pengirim (Atas)

    • Memiliki 4 tombol yang dihubungkan ke pin input GPIO (misal PA0–PA3).

    • Ketika salah satu tombol ditekan, STM32 membaca input tersebut dan mengirimkan data (karakter/byte) ke STM32 penerima melalui UART (TX).

  2. STM32 Penerima (Bawah)

    • Menerima data serial UART melalui pin RX.

    • Berdasarkan data yang diterima (misalnya ‘1’, ‘2’, ‘3’, ‘4’), STM32 akan menyalakan LED yang sesuai (dari 4 LED yang tersedia) pada pin GPIO output (misal PB0–PB3).

    • Jika tidak ada tombol yang ditekan, semua LED mati atau hanya LED tertentu menyala.

  3. Koneksi UART

    • TX STM32 Pengirim dihubungkan ke RX STM32 Penerima dan sebaliknya jika diperlukan (untuk komunikasi dua arah).

    • GND kedua board disambungkan untuk referensi tegangan bersama.

4. Flowchart dan Listing Program [kembali]
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};
oid 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. Kondisi [kembali]

PERCOBAAN 1: UART (STM – STM)

7. Video Simulasi [kembali]





8. Download file [kembali]
Download Datashett STM32 klik disini
Download Datasheet Resistor klik disini
Download video klik disini
Download Datasheet Push Button klik disini
Download Datasheet LED klik disini




Komentar

Postingan populer dari blog ini