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


目录
相关文章
|
8天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
124 78
|
12天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
46 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
8天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
60 13
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
36 3
|
9天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
27 0
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
38 1
|
20天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
7月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
2165 0
|
7月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
254 0
|
2月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统