[KEMBALI KE MENU SEBELUMNYA]
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
Percobaan
2 menggunakan STM32 NUCLEO-G474RE (pada rangkaian diimplementasikan
sebagai NUCLEO-C031C6) untuk mensimulasikan sistem deteksi jarak parkir
mundur pada kendaraan. Switch pada PA0 berperan sebagai kondisi "gigi
mundur aktif" — hanya ketika switch ini dalam kondisi SET (HIGH),
mikrokontroler akan membaca data dari IR Sensor pada PA1. Jika IR Sensor
mendeteksi objek (GPIO_PIN_RESET karena pull-down), LED Merah pada PB1
dan Buzzer pada PB2 dinyalakan sebagai peringatan, sementara LED Hijau
pada PB0 dipadamkan. Sebaliknya, saat tidak ada objek terdeteksi, LED
Hijau menyala menandakan area parkir aman. Delay HAL_Delay(50) ditambahkan
di akhir setiap iterasi untuk mencegah pembacaan sensor yang terlalu
cepat dan menstabilkan debounce, sekaligus menjaga responsivitas sistem
tetap baik bagi pengguna.
#include "main.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
}
else
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
}
}
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;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) !=
HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
b. main.h
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32c0xx_hal.h"
void Error_Handler(void);
#define BUTTON_REVERSE_Pin GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA
#define IR_SENSOR_Pin GPIO_PIN_1
#define IR_SENSOR_GPIO_Port GPIOA
#define LED_GREEN_Pin GPIO_PIN_0
#define LED_GREEN_GPIO_Port GPIOB
#define LED_RED_Pin GPIO_PIN_1
#define LED_RED_GPIO_Port GPIOB
#define BUZZER_Pin GPIO_PIN_2
#define BUZZER_GPIO_Port GPIOB
#ifdef __cplusplus
}
#endif
#endif
1. Bagaimana pengaruh pemilihan GPIO pada masing-masing development board?
Jawab:
Pada praktikum general input-output, pemilihan GPIO pada STM32 krusial karena tiap pin memiliki mode, fungsi alternatif, serta karakteristik listrik berbeda, sehingga menentukan keberhasilan pembacaan input dan pengendalian output secara optimal tanpa konflik periferal.
2. Bagaimana program deklarasi pin I/O pada STM32F103C8?
Jawab:
Deklarasi pin I/O dilakukan dengan mengaktifkan clock GPIO dan mengatur register (mode input/output, pull-up/down, dan tipe output) melalui HAL atau register langsung agar pin dapat beroperasi sesuai fungsi dasar input atau output digital.
3. Analisa bagaimana menerima Input dan mengeluarkan Output pada STM32F103C8!
Jawab:
Input dibaca dari register IDR melalui polling atau interrupt (EXTI), kemudian diproses oleh CPU dan menghasilkan output melalui penulisan ke ODR/BSRR, membentuk alur dasar sistem digital yaitu sensing–processing–actuating.
4. Analisa pengaruh perubahan program pada main.h terhadap program main.c!
Jawab:
Perubahan pada main.h akan
mempengaruhi main.c
karena berisi definisi pin dan prototipe fungsi, sehingga perubahan konfigurasi
I/O di header akan langsung berdampak pada implementasi dan hasil kompilasi
program utama.
5. Analisa bagaimana program dalam analisa metode pendeteksian Inputan pada STM32F103C8!
Jawab:
Pendeteksian input pada praktikum ini menggunakan metode polling atau interrupt, dengan perhatian pada debouncing untuk memastikan sinyal input stabil dan valid sebelum diproses menjadi aksi output.
6. Analisa kelebihan mikrokontroler dibanding rangkaian logika!
Jawab:
Mikrokontroler lebih unggul dibanding rangkaian Logic Gates dalam konteks general I/O karena fleksibel (programmable), mampu menangani banyak kondisi input-output secara dinamis, dan mengintegrasikan fungsi kontrol dalam satu sistem yang efisien.






Tidak ada komentar:
Posting Komentar