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


目录
相关文章
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
24 3
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
18 2
|
5天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
24 3
|
8天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
26 6
|
8天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
35 6
|
9天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
40 5
|
9天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
13天前
|
缓存 监控 Linux
|
16天前
|
Linux Shell 数据安全/隐私保护