Percobaan Pertama
Disusun Oleh :
Nama : Raihan Taufiqurahman
Kelas : 2 D3 ELIN A
NRP : 2321500006
GPIO merupakan kependekan dari General Purpose Input Output. GPIO adalah pin sinyal
digital yang tidak terikat pada fungsi tertentu. Hal ini merupakan keuntungan dimana
fungsinya dan sifat output atau inputnya dapat ditentukan sendiri oleh user pada waktu
digunakan.
Program
int main(void)
{
/* USER CODE BEGIN 1 */
/* MCU Configuration */
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// penulisan menggunakan user label
If (HAL_GPIO_ReadPin(Push_Button_0_GPIO_Port,Push_Button_0_Pin) ==
GPIO_PIN_SET)
{ HAL_GPIO_WritePin(Relay_0_GPIO_Port,Relay_0_Pin,GPIO_PIN_SET);
}else
{ HAL_GPIO_WritePin(Relay_0_GPIO_Port,Relay_0_Pin,GPIO_PIN_RESET);
}
// penulisan menggunakan default HAL IO label
If (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9) == 1)
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,1);
}else
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,0);
}
}
Analisa
Pada percobaan ini yaitu tentang GPIO (General-Purpose Input Output) dimana kitaakan
mempelajari bagaimana menentukan pin-pin pada mikrokontroller menjadi output atau
input.
langkah pertama yang harus dilakukan adalah dengan mengkonfigurasi software yang
disesuaikan dengan hardware yang akan dipakai. Karena chip yang dipakai adalah
stm32f407vgtx maka yang perlu dilakukan adalah membuka software stm32CubeMX.
Terdapat 2 contoh penulisan yang pertama dengan menggunakan user label dimana pada
penulisan ini menggunakan penamaan yang telah diinisialisasi pada software
stm32CubeMX
If (HAL_GPIO_ReadPin(Push_Button_0_GPIO_Port,Push_Button_0_Pin) ==
GPIO_PIN_SET)
{ HAL_GPIO_WritePin(Relay_0_GPIO_Port,Relay_0_Pin,GPIO_PIN_SET);
}else
{ HAL_GPIO_WritePin(Relay_0_GPIO_Port,Relay_0_Pin,GPIO_PIN_RESET);
}
Pada syntax ini menggunaan if/else statement dimana pada syntax ini mensetting pin push
button 0, Jika tombol push ditekan dibaca sebagai (GPIO_PIN_SET), pin keluaran
Relay_0_Pin dari port Relay_0_GPIO_Port diatur ke high (1) diatur sebagai
(GPIO_PIN_SET). Jika tombol push button 0 tidak ditekan, pin output relay 0 diatur ke
low (0) diatur sebagai (GPIO_PIN_RESET).
Pada syntax ini Push button 0 diinisialisasi dengan pin 9 dan output relay 1 diinisialisasi
dengan pin 1, ketika pin 9 bernilai 1 (high) maka output relay 0 pada pin 1 akan bernilai 1 (high),
jika pin 9 bernilai 0 (low) maka output relay 0 pada pin 1 akan bernilai 0 (low)
Pada percobaan yang selanjutnya adalah dengan menambahkan perintah delay() dimana ketika
push botton ditekan maka relay akan menyala namun setelah push botton dilepas lampu led masih
mendelay untuk offnya untk programnya adalah sebagai berikut :
If (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9) == 1)
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,1);
{ HAL_Delay(1000); // delay berfungsi sebagai pencegah bouncing
}else
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,0);
}
Pada syntax ini diatur delay (1000 ms) dimana Ketika Push button 0 diinisialisasi dengan
pin 9 dan output relay 1 diinisialisasi dengan pin 1, ketika pin 9 bernilai 1 (high) maka output relay
0 pada pin 1 akan bernilai 1 (high), jika pin 9 bernilai 0 (low) maka output relay 0 pada pin 1 akan
bernilai 0 (low) jika sudah melewati 1000 ms ( 1detik) pada modul praktikum nilai delay harus
disetting >500 ms agar tidak terjadi kerusakan.
Kesimpulan
1. GPIO merupakan suatu bagian dari mikrokontroller yang digunakan untuk input
maupun output yang berhubungan dengan interface tambahan. Pada masing-
masing pin memiliki kegunaan yang berbeda-beda hal ini tergantung dari
penggunaan jenis
2. Konfigurasi antara aplikasi dan modul praktikum harus sesuai agar bisa saling
terkoneksi
3. Inisialisasi input dan output bisa dilakukan dengan 2 cara yaitu menggunakan user
label atau menggunakan HAL I/O label