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)
    }
}


目录
相关文章
|
28天前
|
XML JSON Ubuntu
Linux系统之tree命令的基本使用
Linux系统之tree命令的基本使用
128 3
Linux系统之tree命令的基本使用
|
1月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
239 17
|
1月前
|
数据挖掘 Linux 数据库
服务器数据恢复—Linux系统服务器数据恢复案例
服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。
|
17天前
|
存储 Linux 内存技术
linux系统查看硬盘序列号
本文介绍在Linux系统中查看硬盘信息的三种方法:1) 使用`hdparm`工具,通过`sudo hdparm -i /dev/sda`获取硬盘序列号和型号;2) 使用`smartctl`工具,不仅可查序列号和型号,还能了解硬盘健康状态;3) 使用`lshw`命令显示存储设备拓扑信息。此外,提供通用技巧如用`lsblk`确认磁盘标识,及注意事项,例如管理员权限和云主机可能隐藏物理序列号等。
|
2月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
162 28
|
2月前
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
164 19
|
2月前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
136 17
|
存储 安全 Unix
unix/linux "数据的对齐" "指针的对齐" .
 "数据的的对齐"     以下内容节选自《Intel Architecture 32 Manual》。     字,双字,和四字在自然边界上不需要在内存中对齐。
1221 0
|
1月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
119 32
|
1月前
|
监控 Linux
Linux命令大全:echo与tail实现输出重定向。
这样,我们实现了使用echo和tail命令进行输出重定向的目的。在实际应用中,输出重定向技巧可节省时间,提高工作效率。希望本文内容对您了解和掌握Linux系统中echo与tail命令以及输出重定向的操作有所帮助。
101 27