Kirim Data dengan Sistem Pooling
Percobaan kali ini akan dilakukan uji coba program untuk mengirimkan data serial USART dengan sistem pooling. Periferal USART yang digunakan adalah USART2 yang terhubung dengan pin PA2 (transmitter) dan PA3 (receiver). Data akan dikirimkan ke komputer melalui kabel USB to Serial. Parameter USART yang digunakan pada percobaan kali ini adalah sebagai berikut :
- Baudrate 115200
- Data bits 8
- Parity none
- Stop bits 1
Data yang akan dikirimkan ke komputer merupakan data ASCII dari teks "Hello World from USART" dan diakhiri dengan karakter enter (CR+LF). Jeda tiap pengiriman data adalah 500ms agar data yang diterima di komputer dapat diamati dengan baik.
Kebutuhan Komponen
- Sistem Minimum STM32F4Discovery 1 unit
- Modul USB to Serial Converter 1 unit
- USB Logic Analyzer 1 unit
- Kabel Jumper Male-Female secukupnya
Gambar Percobaan
Langkah Percobaan
- Hubungkan sistem minimum STM32F4Discovery dengan modul USB to Serial Converter seperti pada Gambar Percobaan.
Buat project baru menggunakan STM32CubeMX dengan memilih STM32F4DISCOVERY pada menu Board Selector. Aktifkan check box Initialize all peripherals with their default Mode agar STM32CubeMX melakukan konfigurasi standar terhadap periferal dan distribusi clock sesuai dengan konfigurasi STM32F4Discovery.
Lakukan konfigurasi pada menu Pinout dengan mengaktifkan periferal USART2 dengan mode Asynchronous.
Lakukan konfigurasi pada menu Configuration dengan memilih USART2 pada bagian Connectivity.
Pada menu Parameter Setting Anda dapat melakukan pengaturan baudrate, ukuran data bits, parity, stop bits dan parameter komunikasi serial lainnya.
Pada menu GPIO Settings rubahlah nama pin pada bagian User Label sesuai dengan nama yang diinginkan. Langkah ini sifatnya tidak wajib, namun dapat memudahkan dalam mengingat nama pin-pin yang digunakan ketika membuat program.
Jika konfigurasi telah selesai lakukan generate source code dan simpan project Anda dengan nama STM32F4_USART_Send_Pooling dengan target IDE MDK-ARM5.
Buka project Anda menggunakan Keil IDE. Kemudian lakukan modifikasi program pada file main.c seperti berikut ini :
Tambahkan header file string.h
#include "string.h"
Modifikasi fungsi main menjadi seperti berikut ini
int main(void) { // Inisialisasi data yang akan dikirim ke UART char data[] = "Hello World from USART \r\n"; /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); /* Infinite loop */ while (1) { // Pengiriman data menggunakan USART2 // Data yang dikirim adalah variabel data // Panjang data yang dikirim dikalkulasi dengan fungsi strlen // Timeout pengiriman data 10ms HAL_UART_Transmit(&huart2,(uint8_t*)data,strlen(data),10); // Jeda pengiriman data setiap 500ms HAL_Delay(500); } }
Lakukan uji coba program dengan cara menghubungkan kabel USB to Serial ke komputer. Kemudian cek Device Manager untuk melihat nama port dari kabel USB to Serial.
Buka software HTerm pada komputer Anda, kemudian samakan nama port dengan yang tertera pada Device Manager. Pastikan juga konfigurasi baudrate, data bits, parity dan stop bits pada HTerm sama dengan yang sudah Anda atur pada saat membuat program sebelumnya (lihat langkah 5). Pada combo box Newline at pilih CR+LF , pilihan ini membuat data akan ditampilkan ke bawah setiap ada karakter enter (CR+LF).
Klik tombol Connect, kemudian perhatikan kolom Received Data pada HTerm. Data yang dikirimkan oleh mikrokontroler akan muncul pada kolom ini. Pastikan data yang dikirimkan oleh mikrokontroler sama dengan yang ditampilkan pada kolom Received Data. Jika data yang muncul tidak sama kemungkinan terdapat kesalahan pada saat melakukan konfigurasi project _atau kesalahan pengaturan parameter serial _port.
Anda dapat melihat sinyal-sinyal data yang dikirimkan melalui USART dengan menggunakan USB Logic Analyzer. Hubungkan pin PA2 pada STM32F4Discovery dengan CH0 pada USB Logic Analyzer.
Buka software Saleae Logic, tekan tombol Start untuk mulai meng-capture sinyal. Pada layar akan muncul sinyal digital yang dikirimkan melalui pin transmitter USART (PA2).
Untuk melakukan analisa sinyal digital, pilih menu Analyzer kemudian pilih Async Serial.
Lakukan konfigurasi parameter serial sesuai dengan konfigurasi pada _project _yang telah Anda buat.
Pada bagian atas akan muncul karakter ASCII hasil decode dari sinyal digital yang dikirimkan melalui USART.
Kirim Data dengan Interupsi
Kebutuhan Komponen
- Sistem Minimum STM32F4Discovery 1 unit
- Modul USB to Serial Converter 1 unit
- Kabel Jumper Male-Female secukupnya
Gambar Percobaan
Percobaan
Buat project baru dengan konfigurasi seperti percobaan sebelumnya. Pada pengaturan USART Configuration aktifkan USART2 global interrupt pada tab NVIC Settings. Ini bertujuan untuk mengaktifkan interupsi pada periferal USART.
Lakukan generate source code dan simpan project Anda dengan nama STM32F4_USART_Send_Interrupt.
Buka project Anda kemudian lakukan modifikasi program pada file main.c seperti berikut ini :
Tambahkan header file string.h
#include "string.h"
Tambahkan fungsi callback di bawah ini pada file main.c di lokasi sebelum fungsi main. Fungsi callback merupakan fungsi yang akan dieksekusi apabila terjadi iterupsi yang bersumber dari USART. Pada percobaan kali ini interupsi akan terjadi jika proses pengiriman data telah komplit. Fungsi callback akan tetap dieksekusi apabila terjadi interupsi, walupun tidak pernah dipanggil pada fungsi main.
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { UNUSED(huart); HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin); }
Lakukan modifikasi fungsi main menjadi seperti di bawah ini :
int main(void) { char *data = "Hello World From USART - Interrupt Transmit Mode \r\n"; /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); while (1) { HAL_UART_Transmit_IT(&huart2,(uint8_t *)data,strlen(data)); HAL_Delay(500); } }
Lakukan kompilasi dan upload program ke mikrokontroler. Buka software HTerm dan perhatikan data yang dikirimkan oleh mikrokontroler. Perhatikan juga nyala LED3 pada STM32F4Discovery. LED3 akan berkedip jika transmisi data telah komplit atau telah selesai.
Kirim Data Menggunakan Fungsi Printf
Kebutuhan Komponen
- Sistem Minimum STM32F4Discovery 1 unit
- Modul USB to Serial Converter 1 unit
- Kabel Jumper Male-Female secukupnya
Gambar Percobaan
Percobaan
- Buat project baru dengan konfigurasi yang sama seperti percobaan 1. Generate source code dan simpan project Anda dengan nama STM32F4_USART_Send_Printf.
Lakukan modifikasi program seperti berikut :
Tambahkan header file string.h
#include "string.h"
Tambahkan baris code berikut sebelum fungsi main
#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); return ch; }
Modifikasi fungsi main menjadi seperti baris source code berikut ini
int main(void) { /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); int i = 0; while (1) { printf("Hello From USART \r\n"); printf("Loop = %d \r\n",i); HAL_Delay(500); } }
Lakukan kompilasi dan uji coba program menggunakan software HTerm.