Laporan Akhir M1=1
- Pertama pahamilah modul dan pahami rangkaian pada modul yang akan di lakukan percobaan
- kedua setelah memahami modul aktifkan aplikasi STM32 yang akan kita pakai
- selanjutnya jika aplikasi sudah siap digunakan rangkailah rangkaian sesuai dengan prosedur pada modul
- jika rangkaian sudah dirangkai dan apabila rangkaian sudah di rasa betul
- lanjut ke pada aplikasi STM32 cocok kan pin input outputnya pada aplikasi
- pada aplikasi kita sesuaikan input dan output yang ada pada modul
- selanjutnya jika sudah, kita juga memasukan program yang ada pada modul ke aplikasi STM32
- jika program sudah di rasa betul dan tidak ada eror selanjutnya coba sambungkan ke rangkaian yang telah kita buat tadi
- jika rangkaian sudah terkonek dengan aplikasi coba jalankan rangkaian
- jika rangkaian berjalan dengan baik berarti percobaan berhasil
- STM32
- Prosesor Inti
- Memori Flash & SRAM
- GPIO
- USART/UART
- I2C & SPI
- Pengatur Waktu & PWM
- ADC (Konverter Analog ke Digital)
- USB
- SWD/JTAG
- Sensor touch
- GPIO
- ADC
- Timer
- I2C/SPI
- Interrupt (EXTI)
- Rangkaian Percobaan
- Prinsip Kerja Rangkaian
- Listing Program
- Penjelasan per barisnya
Berikut adalah penjelasan program STM32 baris per baris tersebut:
#include "main.h"
Menyertakan file header "main.h" yang berisi deklarasi fungsi, konstanta, dan konfigurasi untuk mikrokontroler STM32.
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
Deklarasi fungsi yang akan digunakan. SystemClock_Config()untuk mengkonfigurasi sistem jam, dan MX_GPIO_Init()untuk inisialisasi pin GPIO.
int main(void)
{
Fungsi program utama yang akan dijalankan saat mikrokontroler dinyalakan.
HAL_Init();
Menginisialisasi perpustakaan HAL (Hardware abstraction layer) untuk STM32.
SystemClock_Config();
Memanggil fungsi untuk mengkonfigurasi jam sistem mikrokontroler.
MX_GPIO_Init();
Memanggil fungsi untuk inisialisasi pin GPIO yang digunakan.
while (1)
{
Loop tak terbatas yang akan terus berjalan selama mikrokontroler aktif.
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB,
IR_Pin);
Membaca status dari sensor IR yang terhubung ke pin PB10, hasilnya disimpan dalam variabel ir_status.
uint8_t touch_status =
HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
Membaca status dari sensor sentuh (touch) yang terhubung ke pin PB6, hasilnya disimpan dalam variabel touch_status.
HAL_GPIO_WritePin(BLUE_GPIO_Port,
BLUE_Pin, ir_status);
Mengatur status LED Biru sesuai dengan sensor status IR. Jika sensor IR aktif, LED Biru akan menyala.
HAL_GPIO_WritePin(GPIOA,
GREEN_Pin, touch_status);
mengatur status LED Hijau sesuai dengan status sensor sentuh. Jika sensor sentuh aktif, LED Hijau akan menyala.
if (ir_status ==
GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
Memeriksa apakah kedua sensor (IR dan sentuh) tidak aktif (GPIO_PIN_RESET berarti nilai logika 0).
HAL_GPIO_WritePin(GPIOA,
RED_Pin, GPIO_PIN_SET);
Jika kedua sensor tidak aktif, maka LED Merah menyala (GPIO_PIN_SET berarti nilai logika 1).
} else {
Jika salah satu atau kedua sensor aktif, maka:
HAL_GPIO_WritePin(GPIOA,
RED_Pin, GPIO_PIN_RESET);
LED Merah dimatikan.
}
Akhir dari blok kondisional if-else.
HAL_Delay(10);
Memberikan delay 10 milidetik untuk stabilisasi pembacaan sensor.
}
}
Akhir dari loop while dan fungsi utama.
void SystemClock_Config(void)
{
Definisi fungsi untuk mengkonfigurasi sistem jam.
RCC_OscInitTypeDef
RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef
RCC_ClkInitStruct = {0};
Membuat struktur untuk mengkonfigurasi osilator dan jam dengan nilai awal 0.
RCC_OscInitStruct.OscillatorType
= RCC_OSCILLATORTYPE_HSI;
mengatur tipe osilator menjadi HSI (High-Speed Internal).
RCC_OscInitStruct.HSIState
= RCC_HSI_ON;
Gunung osilator HSI.
RCC_OscInitStruct.HSICalibrationValue
= RCC_HSICALIBRATION_DEFAULT;
Mengatur nilai kalibrasi HSI ke nilai default.
RCC_OscInitStruct.PLL.PLLState
= RCC_PLL_NONE;
Saya mengaktifkan PLL (Phase-Locked Loop).
if (HAL_RCC_OscConfig(&RCC_OscInitStruct)
!= HAL_OK)
{
Konfigurasikan konfigurasi osilator dan periksa apakah berhasil.
Error_Handler();
Jika konfigurasi gagal, panggil fungsi penanganan kesalahan.
}
Akhir dari blok kondisional.
RCC_ClkInitStruct.ClockType
= RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
mengatur tipe jam yang akan dikonfigurasi (HCLK, SYSCLK, PCLK1, dan PCLK2).
RCC_ClkInitStruct.SYSCLKSource
= RCC_SYSCLKSOURCE_HSI;
mengatur sumber SYSCLK dari HSI.
RCC_ClkInitStruct.AHBCLKDivider
= RCC_SYSCLK_DIV1;
Mengatur pembagi AHBCLK menjadi 1 (tidak ada pembagian).
RCC_ClkInitStruct.APB1CLKDivider
= RCC_HCLK_DIV1;
Mengatur pembagi APB1CLK menjadi 1 (tidak ada pembagian).
RCC_ClkInitStruct.APB2CLKDivider
= RCC_HCLK_DIV1;
Mengatur pembagi APB2CLK menjadi 1 (tidak ada pembagian).
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,
FLASH_LATENCY_0) != HAL_OK)
Konfigurasikan konfigurasi jam dan periksa apakah berhasil. FLASH_LATENCY_0 mengatur latensi flash.
{
Error_Handler();
}
}
Jika konfigurasi gagal, panggil fungsi penanganan kesalahan. Akhir dari fungsi SystemClock_Config.
static void MX_GPIO_Init(void)
{
Definisi fungsi untuk inisialisasi GPIO.
GPIO_InitTypeDef
GPIO_InitStruct = {0};
Membuat struktur untuk mengkonfigurasi GPIO dengan nilai awal 0.
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
Mengaktifkan jam untuk port GPIOD, GPIOA, dan GPIOB.
HAL_GPIO_WritePin(GPIOA,
RED_Pin|GREEN_Pin, GPIO_PIN_RESET);
Inisialisasi pin LED Merah dan Hijau pada GPIOA ke status mati (RESET).
HAL_GPIO_WritePin(BLUE_GPIO_Port,
BLUE_Pin, GPIO_PIN_RESET);
Inisialisasi pin LED Biru ke status mati (RESET).
GPIO_InitStruct.Pin =
RED_Pin|GREEN_Pin;
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);
Mengonfigurasi pin LED Merah dan Hijau sebagai output push-pull dengan kecepatan rendah dan tanpa pull-up/pull-down.
GPIO_InitStruct.Pin =
BLUE_Pin;
GPIO_InitStruct.Mode =
GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull =
GPIO_NOPULL;
GPIO_InitStruct.Speed
= GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BLUE_GPIO_Port,
&GPIO_InitStruct);
Mengonfigurasi pin LED Biru sebagai output push-pull dengan kecepatan rendah dan tanpa pull-up/pull-down.
GPIO_InitStruct.Pin =
IR_Pin|TOUCH_Pin;
GPIO_InitStruct.Mode =
GPIO_MODE_INPUT;
GPIO_InitStruct.Pull =
GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
Mengonfigurasi pin IR dan Touch sensor sebagai input tanpa pull-up/pull-down.
}
Akhir dari fungsi MX_GPIO_Init.
void Error_Handler(void)
{
Definisi fungsi untuk menangani kesalahan.
__disable_irq();
Saya mengaktifkan semua interupsi.
while (1)
{
}
Loop tak terbatas, program akan "hang" jika terjadi kesalahan.
}
Akhir dari fungsi Error_Handler.
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
Fungsi untuk menangani kegagalan asertasi, hanya dikompilasi
jika USE_FULL_ASSERT didefinisikan. Fungsi ini kosong, tidak melakukan apa-apa.
- lembar 1
- Lembar 2
- Lembar 3
- Lembar 4
- Vidio Percobaan Kelompok (memang tidak dibuat pada LA)
Komentar
Posting Komentar