rust串口通信实现方法及示例代码

最近在尝试用Rust实现串口通信功能,但遇到了一些问题。想请教各位:

  1. Rust中实现串口通信有哪些常用库?serialport-rs和tokio-serial哪个更适合新手?
  2. 能否分享一个简单的串口通信示例代码,包括初始化和数据传输?
  3. 在Linux和Windows系统下配置串口有没有特别需要注意的地方?
  4. 如何处理串口通信中的超时和错误情况?

我的开发环境是Rust 1.70+,主要用在嵌入式设备通信。感谢各位的指点!

2 回复

使用Rust实现串口通信,推荐使用serialport库。示例代码:

use serialport::{SerialPort, SerialPortSettings};
use std::time::Duration;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let port_name = "COM1"; // Windows
    // let port_name = "/dev/ttyUSB0"; // Linux
    
    let settings = SerialPortSettings {
        baud_rate: 9600,
        timeout: Duration::from_millis(10),
        ..Default::default()
    };
    
    let mut port = serialport::open_with_settings(port_name, &settings)?;
    
    // 发送数据
    port.write(b"Hello")?;
    
    // 读取数据
    let mut buf = vec![0; 128];
    let n = port.read(&mut buf)?;
    println!("收到: {:?}", &buf[..n]);
    
    Ok(())
}

在Cargo.toml中添加依赖:

[dependencies]
serialport = "4.0"

在 Rust 中实现串口通信,可以使用 serialport 库。以下是实现方法和示例代码:

步骤:

  1. 添加依赖:在 Cargo.toml 中添加 serialport = "5"
  2. 配置串口参数(波特率、数据位等)。
  3. 打开串口并读写数据。

示例代码:

use serialport::{SerialPort, SerialPortSettings};
use std::io::{self, Write};
use std::time::Duration;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 配置串口参数
    let settings = SerialPortSettings {
        baud_rate: 9600,
        data_bits: serialport::DataBits::Eight,
        flow_control: serialport::FlowControl::None,
        parity: serialport::Parity::None,
        stop_bits: serialport::StopBits::One,
        timeout: Duration::from_millis(1000),
    };

    // 打开串口(根据系统替换端口名)
    let port_name = if cfg!(windows) { "COM3" } else { "/dev/ttyUSB0" };
    let mut port = serialport::open_with_settings(&port_name, &settings)?;

    // 发送数据
    let data = b"Hello, Serial!\n";
    port.write_all(data)?;

    // 读取数据
    let mut buffer = vec![0; 128];
    let bytes_read = port.read(&mut buffer)?;
    println!("收到数据: {:?}", &buffer[..bytes_read]);

    Ok(())
}

关键说明:

  • 端口名:Windows 通常为 COMx,Linux/macOS 为 /dev/ttyXXX
  • 错误处理:使用 ? 简化错误传播。
  • 超时设置:避免读取阻塞。

运行准备:

  1. 安装 Rust 环境。
  2. 执行 cargo add serialport 添加依赖。
  3. 根据实际设备修改端口名和参数。

此代码实现了基础的串口数据发送与接收,适用于常见嵌入式或设备通信场景。

回到顶部