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.
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
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];
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);
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);
}
GPIO_InitTypeDef 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
/**
* @}
*/
/**
* @}
*/
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
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.
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.