Linux系统是如何控制串口收发数据的?

简介: Linux系统是如何控制串口收发数据的?

1. 串口工作原理

串口(Serial Port)是一种通信接口,可用于实现计算机与外部设备的通信。串口工作原理如下:

数据传输:串口通过一组引脚,在两端设备之间进行数据传输。 数据编码:串口通常使用 RS-232 或 RS-485 等数据编码方式,对数据进行编码并传输。数据格式: 串口通信使用的数据格式可能包括数据位, 停止位,校验位等,具体决定了数据的传输格式。 波特率:波特率是指串口每秒传输的数据位数,通常可以通过设置来调整串口的通信速度。 控制信号:串口还提供了一些控制信号,如请求发送(RTS)和数据准备就绪(DSR)等,用于控制通信的流程。通过以上原理,串口实现了计算机与外部设备的通信,可以用于实现各种应用,如设备控制,数据采集等。

2.1 命令行实现数据收发

1、设置终端:
查看串口:ls /dev/tty
设置串口参数:stty -F /dev/ttyS0 9600
 
2、读取数据:cat /dev/ttyS0
3、写入数据:echo "Hello world" > /dev/ttyS0

2.2 linux c实现数据收发

struct termios options;
tcgetattr(fd, &options);
options.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
options.c_iflag = IGNPAR;
options.c_oflag = 0;
options.c_lflag = 0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
 
char send_buff[] = "Hello, World!\n";
int len = write(fd, send_buff, sizeof(send_buff));
if (len < 0) {
    perror("Write Data Error!\n");
    return -1;
}
 
char recv_buff[100];
len = read(fd, recv_buff, sizeof(recv_buff));
if (len < 0) {
    perror("Read Data Error!\n");
    return -1;
}
 
recv_buff[len] = '\0';
printf("Received Data: %s\n", recv_buff);
 
close(fd);
return 0;
}

2.3 golang实现数据收发

package main
 
import (
    "bufio"
    "fmt"
    "github.com/tarm/serial"
    "log"
    "time"
)
 
func main() {
    c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 115200}
    s, err := serial.OpenPort(c)
    if err != nil {
        log.Fatal(err)
    }
    defer s.Close()
 
    buf := make([]byte, 128)
    n, err := s.Read(buf)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(n, "bytes read:", string(buf[:n]))
 
    n, err = s.Write([]byte("test"))
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(n, "bytes written")
 
    // use bufio for improved performance
    r := bufio.NewReader(s)
    for {
        n, err := r.Read(buf)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(n, "bytes read:", string(buf[:n]))
        time.Sleep(time.Second)
    }
}


目录
相关文章
|
1天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
2天前
|
Linux Windows
Linux系统中如何查看磁盘情况
在Linux服务器中,通过命令行查看磁盘和文件占用情况是常见操作。`df`命令用于显示磁盘总容量、已用空间和可用空间,加上`-h`参数可使结果更易读。例如:`df -h .`。而`du`命令则用来检查目录或文件的大小,`du -hd 1 .`会显示当前目录下每个文件夹的大小。结合`sort -h`或`sort -hr`可以按人类易读的格式排序文件大小,便于查找占用空间最多的项目。
|
3天前
|
存储 监控 Ubuntu
Linux系统之GoAccess实时Web日志分析工具的基本使用
【5月更文挑战第22天】Linux系统之GoAccess实时Web日志分析工具的基本使用
13 0
|
5天前
|
Linux 测试技术 开发工具
Linux系统之advcpmv工具的安装和基本使用
【5月更文挑战第21天】Linux系统之advcpmv工具的安装和基本使用
15 2
|
5天前
|
消息中间件 Linux 数据库
第五十三章 使用 ^SystemPerformance 监视性能 - InterSystems IRIS Linux 平台性能数据报告
第五十三章 使用 ^SystemPerformance 监视性能 - InterSystems IRIS Linux 平台性能数据报告
11 0
|
6天前
|
设计模式 安全 Java
【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解
【Linux 系统】多线程(生产者消费者模型、线程池、STL+智能指针与线程安全、读者写者问题)-- 详解
|
6天前
|
安全 算法 Linux
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)
【Linux 系统】多线程(线程控制、线程互斥与同步、互斥量与条件变量)-- 详解(下)
|
6天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理