Laporan Akhir - Modul 3




Percobaan 1
UART (STM-STM)

1. Prosedur
[Kembali]

  1. Membuat rangkaian sesuai dengan percobaan 7.
  2. Buat program untuk STM32 di software STM32 CUBE ID.
  3. Setelah program selesai di buat, inputkan kode tersebut kedalam STM32 dengan stlink.
  4. Simulasi, Push Button ditekan maka LED menyala
  5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) STM32F103C6T8



2. LED






3. Resistor

4. Push Button


5. Breadboard
BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 

Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi:




Prinsip Kerja : 

    Protokol komunikasi UART pada Devbboard STM32 yaitu menggunakan 2 STM32F103C6T8 yangmana salah satu berfungsi sebagai pengirim dan yang lainnya sebagai penerima. Pada percobaan yang telah dilakukan, STM32_1 (Pengirim) dihubungkan dengan 4 buah push button yang digunakan sebagai inputan untuk mengirimkan data/perintah ke STM32_2(Penerima) dihubungkan dengan LED sesuai dengan push button yaang ditekan pada STM32_1
    Koneksi UART antar STM32 yang dilakukan pada percobaan, pada stm 32_1(Pengirim pin PA9 berperan sebagai Tx dihubungkan dengan STM32_2 (Penerima) pin PA10 yang beperan sebagai RX sehingga tombol-tombol pada push button  apabila ditekan akan memberikan sinyal data/perintah ke LED yang membuat LED menyala masing-masing sesuai push button yang ditekan

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)

{

}

}

UART_HandleTypeDef huart1;

uint8_t receivedData[4];

#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]



5. Analisa [Kembali]


7. Download File [Kembali]

Download HTML [Download]
Download Video Demo [Download]
Download Datasheet STM32 [Download
Download Datasheet Push Button [Download]
Download Datasheet LED RGB [Download]
 

Tidak ada komentar:

Posting Komentar

Modul 1 Percobaan 2 Kondisi 7

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Kondisi 2. Gambar Rangkaian Simulasi 3. Video simulasi 4. Prinsip Kerja Rangkaia...