Anda di halaman 1dari 8

LAPORAN RESMI

TEKNIK ANTARMUKA DAN KOMPUTER


SERIAL RS-232

NAMA : M. IQBAL FITRIANTO


NRP : 1310151037
DOSEN : EKA PRASETYONO, S.ST, MT.

PROGRAM STUDI TEKNIK ELEKTRO INDUSTRI


DEPARTEMEN TEKNIK ELEKTRO
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA

2017
Percobaan 1
Serial RS-232

I. Tujuan
Mahasiswa dapat melakukan transfer data dengan menggunakan serial RS-232.
Mahasiswa dapat menghubungkan PC dengan mikrokontroller untuk dapat
berkomunikasi melalui port serial.

II. Dasar teori


Komunikasi serial adalah komunikasi yang pengiriman datanya per-bit secara
berurutan dan bergantian. Komunikasi ini mempunyai suatu kelebihan yaitu hanya
membutuhkan satu jalur dan kabel yang sedikit dibandingkan dengan komunikasi
paralel. Pada prinsipnya komunikasi serial merupakan komunikasi dimana pengiriman
data dilakukan per bit sehingga lebih lambat dibandingkan komunikasi parallel, atau
dengan kata lain komunikasi serial merupakan salah satu metode komunikasi data di
mana hanya satu bit data yang dikirimkan melalui seuntai kabel pada suatu waktu
tertentu. Pada dasarnya komunikasi serial adalah kasus khusus komunikasi paralel
dengan nilai n = 1, atau dengan kata lain adalah suatu bentuk komunikasi paralel
dengan jumlah kabel hanya satu dan hanya mengirimkan satu bit data secara
simultan.Hal ini dapat disandingkan dengan komunikasi paralel yang sesungguhnya di
mana n-bit data dikirimkan bersamaan, dengan nilai umumnya 8 n 128.
RS232 adalah suatu standar komunikasi serial transmisi data antar dua
peralatan elektronik. RS232 dibuat pada tahun 1962 oleh Electronic Industry
Association and Telecomunication Industry Association dan ada dua hal pokok yang
diatur oleh RS232, yaitu: bentuk signal dan level tegangan yang dipakai. Selain
digunakan pada peralatan PLC, sebenarnya sistem RS232 ini sering berhubungan
dengan kita pada kehidupan sehari-hari, antara lain: komunikasi PC komputer dengan
mouse, keybord atau scanner. Satu hal yang jelas adalah RS323 ini akan diaplikasikan
pada semua sistem peralatan yang berbasis computer atau mikrokontroler.
Ada sejumlah rangkaian transceiver RS232 yang biasa digunakan untuk
komunikasi antara mikrokontroler dengan divais lain seperti PC atau divais lain yang
menggunakan RS232. Untuk menekan harga, dapat digunakan rangkaian dengan dua
transistor seperti yang tampak pada gambar berikut.
Dalam rangkaian lain digunakan Max232 dari Maxim. Rangkaian ini sangat
stabil dan digunakan untuk rancangan yang profesional. Divais ini tidak mahal,
menyediakan dua kanal RS232. Setiap output transmitter dan input receiver dilindungi
terhadap kejutan elektrostatik hingga 15kV. Divais ini dapat beroperasi dengan catu
tunggal 5V.

III. Peralatan
1. Komputer
2. Software STM32CubeMX
3. Software Keil uVision
4. Software CVAvr
5. Modul mikrokontroller STM32F407VGTx
6. Kabel Port RS-232 (DB9)
7. Kabel USB

IV. Langkah Percobaan


1. Membuka software STM32CubeMX.
2. Melakukan konfigurasi port serial pada software STM32CubeMX.
3. Men-generate hasil konfigurasi.
4. Menghubungkan modul praktikum dengan komputer menggunakan port serial RS-
232 (DB9).
5. Menuliskan program pada software Keil uVision.
6. Mendownload progam yang telah dibuat.
7. Menuliskan data yang dikirim dengan memanfaatkan fitur terminal pada software
CVAvr.
8. Memeriksa kesesuaian data yang dikirim dari PC dengan yang ditampilkan pada
LCD.

V. Hasil Percobaan
Program
#include "stm32f4xx_hal.h"
#include "lcd_character.h"

#include "stdio.h"
#include "stdlib.h"
#define RX_BUFFER_SIZE 16
uint8_t rx_data, rx_buffer[RX_BUFFER_SIZE+1];
unsigned int rx_index,n;
char buffer [RX_BUFFER_SIZE+1];

/* Private variables ---------------------------------------------------------*/


UART_HandleTypeDef huart1;

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();

lcd_init();
HAL_UART_Receive_IT(&huart1,&rx_data,1);

lcd_gotoxy(0,0);
lcd_puts(" M. Iqbal F" );
HAL_Delay(1000);

while (1)
{
lcd_gotoxy(0,1);
lcd_data(rx_buffer[0]);
lcd_data(rx_buffer[1]);
lcd_data(rx_buffer[2]);
lcd_data(rx_buffer[3]);
lcd_data(rx_buffer[4]);
lcd_data(rx_buffer[5]);
lcd_data(rx_buffer[6]);
lcd_data(rx_buffer[7]);
lcd_data(rx_buffer[8]);
lcd_data(rx_buffer[9]);
lcd_data(rx_buffer[10]);
lcd_data(rx_buffer[11]);
lcd_data(rx_buffer[12]);
lcd_data(rx_buffer[13]);
lcd_data(rx_buffer[14]);
lcd_data(rx_buffer[15]);
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1,&rx_data,1);
if (rx_index >= RX_BUFFER_SIZE)
rx_index=0;
rx_buffer[rx_index] = rx_data;
rx_index++;
}
/** System Clock Configuration
*/
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 = 332;
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_DIV4;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */


HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* USART1 init function */


void MX_USART1_UART_Init(void)
{

huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}

/** Configure pins as


* Analog
* Input
* Output
* EVENT_OUT
* EXTI
*/
void MX_GPIO_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;

/* GPIO Ports Clock Enable */


__GPIOE_CLK_ENABLE();
__GPIOH_CLK_ENABLE();
__GPIOD_CLK_ENABLE();
__GPIOB_CLK_ENABLE();

/*Configure GPIO pins : PE2 PE3 PE4 PE5


PE6 PE7 PE0 */
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_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 : PD0 PD1 PD2 PD3


PD4 PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

#ifdef USE_FULL_ASSERT

/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */

}
#endif
/**
* @}
*/

/**
* @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


VI. Analisa
Berdasarkan praktikum yang telah dilakukan yaitu tentang komunikasi serial
meggunakan RS-232, maka diperoleh program seperti diatas. Praktikum ini
merupakan komunikasi serial yang dilakukan yaitu melalui Mikrokontroller ARM
STM32F4 dengan PC menggunakan software CVAvr sebagai virtual terminal yang
akan menghubungkan mikrokontroller dengan PC. Disini juga digunakan kabel DB 9
to USB, yang nantinya USB tersebut akan dihubungkan ke PC yang digunakan.

UART_HandleTypeDef huart1; 1
static void MX_USART1_UART_Init(void); 2
#define RX_BUFFER_SIZE 16 3

HAL_UART_Receive_IT(&huart1,&rx_data,1); 4

Program no. 1 merupakan pengenalan type USART yang digunakan. Karena di


program ini yang digunakan adalah type Asynchronous maka yang ditulis hanyalah A
saja sehingga menjadi UART. Untuk program no. 2 merupakan inisialisasi dari
penggunaan fungsi serial. Typenya ada 2 yaitu Synchronous dan Asynchronous.
Fungsi USART ini banyak digunakan dalam komunikasi serial pada mikrokontroller
dikarenakan tanpa memberikan clock pada penerimanya. Sedangkan program no. 3
merupakan definisi dari jumlah maksimum karakter yang dapat dikirim, yaitu
sebanyak 16 karakter. Program no. 4 digunakan sebagai inisialisasi atau fungsi yang
digunakan untuk mengaktifkan fungsi penerimaan data (receive) dengan type USART
yang digunakan adalah Asynchronous (UART), karena dalam percobaan ini
mikrokontroller hanya sebagai penerima data saja.
while (1)
{
lcd_gotoxy(0,1);
lcd_data(rx_buffer[0]);
lcd_data(rx_buffer[1]);
lcd_data(rx_buffer[2]);
lcd_data(rx_buffer[3]);
lcd_data(rx_buffer[4]);
lcd_data(rx_buffer[5]);
lcd_data(rx_buffer[6]);
lcd_data(rx_buffer[7]); 5
lcd_data(rx_buffer[8]);
lcd_data(rx_buffer[9]);
lcd_data(rx_buffer[10]);
lcd_data(rx_buffer[11]);
lcd_data(rx_buffer[12]);
lcd_data(rx_buffer[13]);
lcd_data(rx_buffer[14]);
lcd_data(rx_buffer[15]);
}

Pada program no. 5, data yang dikirim dari PC ke mikrokontroller setiap datanya
mempunyai indeks tersendiri, yaitu dari mulai berindeks 0 sampai berindeks n-1 atau
apabila jumlah maksimum datanya 16 maka indeksnya sampai 15 saja.

if (rx_index >= RX_BUFFER_SIZE)


6
rx_index=0;
Pada program no. 6, apabila indeks dari data yang dikirim melebihi atau sama
dengan maksimum data yang telah didefinisikan diatas, maka indeks data akan
kembali ke 0 lagi. Misalnya untuk data ke-16 yang dikirim maka akan berindeks 15,
untuk selanjutnya data yang ke-17 akan kembali ke indeks 0, dan data ke-18 akan
berindeks 1, begitu seterusnya.
Dalam percobaan ini, data yang dikirimkan merupakan data dalam bentuk kode
ASCII.

VII. Kesimpulan
1. Untuk menghubungkan PC dengan mikrokontroller dapat menggunakan
komunikasi serial dengan RS 232.
2. Proses pengiriman data yang dilakukan menggunakan USART (Universal
Synchronous Asynchronous Receiver Transmitter) yang banyak digunakan untuk
komunikasi serial.
3. Type USART yang digunakan untuk praktikum ini adalah type Asynchronous
sehingga pada program ditulis UART.
4. Fungsi Transmit digunakan untuk pengiriman data dan fungsi Receive digunakan
untuk penerimaan data.

Anda mungkin juga menyukai