Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


products:sbc:edge2:applications:gpio:uart

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
products:sbc:edge2:applications:gpio:uart [2022/12/02 02:22]
ivan [Introduction]
products:sbc:edge2:applications:gpio:uart [2023/08/13 22:40] (current)
jacobe
Line 3: Line 3:
 ====== Edge2 UART ====== ====== Edge2 UART ======
  
-===== UART =====+
  
 ===== Introduction ===== ===== Introduction =====
Line 36: Line 36:
 ``` ```
  
 +===== Demo Source Code =====
 +```c uart.c
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <string.h>
 +#include <fcntl.h>
 +#include <unistd.h>
 +#include <termios.h>
 +
 +// set serial path
 +#define SERIAL_PORT "/dev/ttyS7"
 +
 +int main() {
 +    int serial_port;
 +    struct termios tty;
 +    
 +    // open
 +    serial_port = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
 +    if (serial_port < 0) {
 +        perror("Error opening serial port");
 +        return 1;
 +    }
 +    
 +    // Configuration of serial
 +    memset(&tty, 0, sizeof(tty));
 +    if (tcgetattr(serial_port, &tty) != 0) {
 +        perror("Error getting serial port attributes");
 +        close(serial_port);
 +        return 1;
 +    }
 +    
 +    cfsetospeed(&tty, B1500000); // set baud rate
 +    cfsetispeed(&tty, B1500000);
 +    
 +    tty.c_cflag |= (CLOCAL | CREAD);
 +    tty.c_cflag &= ~PARENB;     
 +    tty.c_cflag &= ~CSTOPB;     
 +    tty.c_cflag &= ~CSIZE;
 +    tty.c_cflag |= CS8;         
 +    
 +    // write configration to serial
 +    if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
 +        perror("Error setting serial port attributes");
 +        close(serial_port);
 +        return 1;
 +    }
 +    
 +    // loop test
 +    while (1) {
 +        // receive data
 +        char received_data[64];
 +        if (read(serial_port, &received_data, sizeof(char)*64)) {
 +            // get data
 +            printf("Received: %s", received_data);
 +        }
 +
 +        // Only send "Hello, UART!"
 +        char data_to_send[] = "Hello, UART!\n";
 +        write(serial_port, data_to_send, strlen(data_to_send));
 +        
 +        // sleep 100ms
 +        usleep(100000); 
 +    }
 +    
 +    // close
 +    close(serial_port);
 +    
 +    return 0;
 +}
 +```
 +
 +Compile test code:
 +
 +```
 +$ gcc uart.c -o uart
 +```
 +
 +Run ''uart''
 +
 +```
 +$ ./uart
 +```
 +
 +After connecting PIN12(STX), PIN14(CSO) and GND to PC, open ttyUSBX and input hello
 +
 +```
 +1 hello
 +2 Hello, UART!
 +```
 +
 +Check output data:
 +
 +```
 +$ ./uart
 +Received: hello
 +```
  
 ===== Disable UART to Use GPIO ===== ===== Disable UART to Use GPIO =====
  
 If you want to use normal GPIO instead of UART, you can remove the UART node in [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]]. If you want to use normal GPIO instead of UART, you can remove the UART node in [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]].
Last modified: 2022/12/02 02:22 by ivan