#include "main.h"

/* Fungsi Prototipe */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void) {
  /* Inisialisasi HAL Library */
  HAL_Init();

  /* Konfigurasi Clock System */
  SystemClock_Config();

  /* Inisialisasi GPIO */
  MX_GPIO_Init();

  while (1) {
    /* Nyalakan LED */
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
    HAL_Delay(2000); // Tunggu 2 detik

    /* Matikan LED */
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
    HAL_Delay(2000); // Tunggu 2 detik
  }
}

void SystemClock_Config(void) {
  /* Konfigurasi clock system default */
  // Auto-generated code dari STM32CubeMX
}

static void MX_GPIO_Init(void) {
  /* Inisialisasi struktur konfigurasi GPIO */
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* Aktifkan clock untuk port D */
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /* Konfigurasi pin D2 sebagai output */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Output push-pull
  GPIO_InitStruct.Pull = GPIO_NOPULL;        // Tidak ada pull-up/pull-down
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}