首页 > 解决方案 > 如何在 Rust 的串行端口箱中使用 read_line 函数

问题描述

我正在使用树莓上的串口板条箱。给定的例子port.read工作正常。但是port.read_to_end还是port.read_to_string不起作用,我会超时。任何人都可以解释这种行为吗?这两个函数读取所有字节,直到 EOF。我正在发送带有空终止的测试字符串。

我对read_line功能更感兴趣。但这并不直接与 serialport crate 支持,是吗?我可以为此使用 BufRead 特征吗?

标签: rustserial-port

解决方案


这是一个最小的例子read_line。在 TX 和 RX 连接时工作。

use serialport;
use std::time::Duration;
use std::io::BufReader;
use std::io::BufRead;

fn main() {
    let mut serial_port = serialport::new("/dev/serial0", 9600)
        .timeout(Duration::from_millis(1000))
        .open()
        .expect("Failed to open serial port");

    let output = "This is a test.\n".as_bytes();
    serial_port.write(output).expect("Write failed!");
    serial_port.flush().unwrap();

    let mut reader = BufReader::new(serial_port);
    let mut my_str = String::new();
    reader.read_line(&mut my_str).unwrap();

    println!("{}", my_str);
}

推荐阅读