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();

浙公网安备 33010602011771号