tokio_serial rust 串口库

available_ports()

该函数的作用是列出所有串口设备。

fn main() {
    let serial_list = tokio_serial::available_ports().unwrap();

    for p in serial_list {
        println!("port info : {:#?}", p);
    }
}

输出结果:

port info : SerialPortInfo {
    port_name: "COM5",
    port_type: UsbPort(
        UsbPortInfo {
            vid: 1155,
            pid: 14155,
            serial_number: None,
            manufacturer: Some(
                "STMicroelectronics",
            ),
            product: Some(
                "STMicroelectronics STLink Virtual COM Port (COM5)",
            ),
        },
    ),
}

SerialPortType 枚举类型

该枚举类型定义了几种串口类型,我们要使用的是 UsbPort 类型,其他类型不处理。

pub enum SerialPortType {
    UsbPort(UsbPortInfo),
    PciPort,
    BluetoothPort,
    Unknown,
}

输出串口列表完整代码

下面是相当完整的输出串口列表的代码:

fn main() {
    let serial_list = tokio_serial::available_ports().unwrap();

    println!("------------------------------------------------------------");
    for p in serial_list {
        match p.port_type {
            tokio_serial::SerialPortType::UsbPort(info) => {
                println!("port name: {}", p.port_name);
                println!("vid: {}", info.vid);
                println!("pid: {}", info.pid);

                if let Some(serial_number) = info.serial_number {
                    println!("serial_number: {}", serial_number);
                }

                if let Some(manufacturer) = info.manufacturer {
                    println!("manufacturer: {}", manufacturer);
                }

                if let Some(product) = info.product {
                    println!("product: {}", product);
                }

            },
            _ => println!("{} 未知串口类型", p.port_name)
        }
        println!("------------------------------------------------------------");
    }
}

new() 创建一个串口流

tokio_serial::new() 方法创建一个串口流,并且可以链式设置常用参数,如:数据位、停止位、校验位等。

// 创建一个串口流
let com = tokio_serial::new(port_name, 115200)
    .timeout(std::time::Duration::from_millis(70))
    .data_bits(tokio_serial::DataBits::Eight)
    .stop_bits(tokio_serial::StopBits::One)
    .parity(tokio_serial::Parity::None)
    .open_native_async();
posted @ 2023-05-05 01:30  小土坡  阅读(1125)  评论(0)    收藏  举报