Anda di halaman 1dari 11

Praktikum Mikrokontroller Dan Interface

Percobaan 1
GPIO (General Purpose Input Output)

I.

Tujuan
1. Mahasiswa dapat mengetahui fungsi dari GPIO pada ARM STM32F407VGTx
2. Mahasiswa dapat melakukan konfigurasi GPIO pada ARM STM32F407VGTx
3. Mahasiswa dapat membuat program c melalui software keil uvision untuk
aktivasi GPIO pada ARM STM32F407VGTx
4. Mahasiswa memahami cara membuat inisialisasi I/O dari ARM menggunakan
software STM32 Cube.
5. Mahasiswa dapat

mengolah

bahasa pemograman

dari ARM

dengan

menggunakan software keil uvision5.


II.

Dasar Teori
ARM merupakan

salah

satu

dari

jenis

mikrokontroler

yang

dapat

digunakan untuk mengatur atau mengontrol sesuatu dengan menggunakan bahasa


pemograman C. Fungsi dari ARM biasanya digunakan pada pabrik/industri yang
menggunakan sistem otomasi. ARM adalah prosessor dengan arsitektur set
intruksi 32bit RISC (Reduced Intruction Set Computer) yang dikembangkan oleh
ARM Holding. ARM merupakan singkatan dari Advanced RISC Machine
(sebelumnya lebih dikenl dengan kepanjangan RISC Machine). Pada awalnya
ARM proesor dikembangkan untuk PC (personal computer) oleh Acorn Computers,
sebelum dominasi Intel x86 prosesor

Microsoft

di

IMB

PC

kompatibel

menyebabkan Acorn Computers bangkrut.


Melalui izin dari seluruh dunia, arsitektur ARM adalh yang paling umum
dilaksanakan 32-bitset intruksi arsitektur. Arsitektur ARM diimplementasikan pada
Windows, Unix, dan sistem operasi mirim Unix, termasuk Apple iOS,
Android, BSD, Inferno, Solaris, WebOS, Plan 9 dan GNU/Linux. ARM
awalnya dikenal sebagai Mesin Acorn RISC.
Adapun software yang akan digunakan ada 2 buah, untuk awal inisialisasi pin
sebagai input atau output dapat menggunakan aplikasi STM32CubeMX. Dan
selanjutnya untuk mengolah bahasa C yang akan digunakan untuk mengontrol
ARM tersebut dapat menggunakan aplikasi Keil uVision.

III.

Gambar Rangkaian Percobaan

IV.

Alat dan Bahan


1. Modul ARM STM32F407VGTx
2. Software STM32 Cube MX
3. Software keli uvision 5
4. Kabel ST-LINK
5. Adaptop 5 Volt dc

V.

Algorithma
1. Jika push button 1 ditekan maka relay 1 akan aktif
2. Jika push button 2 ditekan maka relay 1 dan 2 akan aktif
3. Jika push button 3 ditekan maka relay 1, 2 dan 3 akan aktif
4. Jika push button 4 ditekan maka relay 1, 2, 3 dan 4 akan aktif
5. Jika push button 5 ditekan maka relay 1, 2, 3, 4 dan 5 akan aktif
6. Jika push button 6 ditekan maka relay 1, 2, 3, 4, 5 dan 6 akan aktif
7. Jika push button 7 ditekan maka relay 1, 2, 3, 4, 5, 6 dan 7 akan aktif
8.

Jika push button 8 ditekan maka relay 7 akan mati delay 1 detik kemudian
diikuti relay 6 akan mati dan delay 1 detik begitu seterusnya sampai semua relay
mati bergantian dengan delay 1 detik masing masing relay

VI.

Flow Chart

START

PE8 ==
1?

Yes

PE0=
1
PE1=PE2=PE3=PE4=PE5=PE
6=PE7=0

No

PE9 ==
1?

Yes

PE0=PE1
=1
PE2=PE3=PE4=PE5=PE6
=PE7=0

No

PE10==
1?

Yes

PE0=PE1=PE
2=1
PE3=PE4=PE5=PE6=
PE7=0

No

PE11==
1?

Yes

PE0=PE1=PE2=PE3=1
PE4=PE5=PE6=PE7=0

No

PE11==1 ?

Yes

PE0=PE1=PE2=PE3=1
PE4=PE5=PE6=PE7=0

No

PE12==1 ?

Yes

PE0=PE1=PE2=PE3=
PE4=1
PE5=PE6=PE
7=0

No

PE13==1 ?

Yes

PE0=PE1=PE2=PE3=PE4
=PE5=1
PE6=PE7
=0

No

VI.

Flow Chart
A

PE14==1 ?

Yes

PE0=PE1=PE2=PE3=PE4=PE
5= PE6=1
PE7=
0

No

PE15==1 ?
No

Yes

PE6=0
PE5=0
PE3=0
PE1=0

DELAY
DELAY
DELAY
DELAY

PE6=0
PE4=0
PE2=0
PE0=0

DELAY
DELAY
DELAY
DELAY

END

VII.

Program

#include "stm32f4xx_hal.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(GPIOE,GPIO_PIN_8)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_
PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_9)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1|GPIO_PIN_0,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_
PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}

if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_10)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_
PIN_6|GPIO_PIN_7,0);
}
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_11)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_
PIN_3,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_
PIN_7,0);
}
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_12)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_
PIN_3|GPIO_PIN_4,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_
PIN_3|GPIO_PIN_4|GPIO_PIN_5,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6|GPIO_PIN_7,0);
}
if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_14)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_
PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,0);
}
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_15)==1)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,0);
HAL_Delay(1000);

HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,0);
}
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1
);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
GPIOE_CLK_ENABLE();
GPIOH_CLK_ENABLE();
/*Configure GPIO pins : PE2 PE3 PE4 PE5
PE6 PE7 PE0 PE1 */
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE8 PE9 PE10 PE11
PE12 PE13 PE14 PE15 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif
VIII. Analisa
Pada percobaan kali ini mempraktekkan ARM STM32F407VFTx untuk
GPIO (General Purpose Input Output). Dimana untuk input menggunaka push button yang
terhubung dengan Port E 8 sampai Port E15, sedangkan untuk output menggunakan relay yang
tehubung dengan Port E 0 ampai Port E 7.
Sebelum melakukan pemrograman pada ARM menggunakan keil uvision maka
perlu dilakukan inisialisai fitur apa saja yang akan digunakan pada ARM. Sehingga diperlukan
sebuah wizard yang digunakan untuk aktivas fitur tersebut. Jika pada code vision AVR wizard
nya udah include menjadi satu namun pada keil tidak include dengan wizard nya. Sehingga
untuk aktivasi fitur pada ARM perlu software tambahan yaitu STM32 Cube MX
dimana software ini digunakan sebagai wizard untuk aktivasi fitur yang ada di dalam ARM.
Tata cara untuk aktivai GPIO pada cube adalah sebagai berikut
1. Buka cube, setelah itu new project dan akan tampil seperti berikut

2.

Lalu setelah itu pilihlah series yaitu STM32F4, lines STM32F407/417 dan
package LQFP 100 dan pilihlah STM32F407VGTx. Hal ini karena ARM yang ada pada
modul praktikum merupakan tipe ini. Setelah itu klik 2 kali pada jenis ARM yang
digunakan tersebut

3.

Setelah itu lakukan aktivasi pada RCC dengan mengisi pada kolom high speed clock
dengan menggunakan tipe crystal/ceramic resonator. RCC ini seperti jantung dari chip
ARM yang digunakan. RCC ini digunakan sebagai sumber clock dari ARM. Dengan
aktivasi ini maka pada Port ARM akan berwarna hijau tanda bahwa pin tersebut telah
digunakan

4. Setelah itu lakukan aktivasi pada masing masing pin yang digunakan untuk
GPIO.
Carilah PORTE 0 sampai PORTE 15 yang terapat pada gambar chip ARM. Kemudian
klik kiri pada PORTE 0 pilih sebagai GPIO output. Lakukan aktivasi yang sama untuk
PORT E 1 sampai PORT E 7.
Setelah itu lakukan aktivasi pula untuk PORTE 8 sampai PORTE 15 sebagai GPIO
input

5.

Langkah selanjutnya adalah lakukan pengaturan clock konfigurasi yang terdapat pada
pojok kiri atas dari tampilan software. Pilih dan klik clock configuration

Isilah pada input frequency pada jalur HSE sebesar 8 MHz hal ini dikarenakan crystal
yang ada pada modul ARM sebesar 8MHz. Centanglah pada jalur HSE dan PLLCLK
kemudian pilihlah pembagi dan pengali yang sesuai agar clok bisa dimaksimalkan
sebesar 168 MHz. Pada settingan ini menggunakan pembagi /8 pengali x336 dan
pembagi /2 sehingga akan di dapatkan nilai pada clock maksimal 168 MHz.
Lakukan setting yang sama untuk APB1 Prescaler dan APB2 prescaler dengan membagi
masing masing dengan pembagi /4 dan /2.

IX.

Kesimpulan

Dari praktikum yang telah dilakukan maka bisa disimpulkan sebagai berikut
1. STM32 Cube MX merupakan sebuah software yang digunakan sebagai wizard untuk
software keil uvision. Dimana Cube ini mempermudah kita dalam melakukan aktivasi
fitur fitur yang ada dalam ARM
2. Software Keil uvision5 adalah software pengolah program yang dikhususkan
untuk
ARM dengan bahasa C.
3. Pada ARM STM32F407VGTx terdapat 100 buah PIN. Tetapi hanya terdapat 82 PIN
yang bisa digunakan untuk GPIO (General Purpose Input Output)