我需要在我的程序中通过串口执行简单的交换。我找不到任何与串口有关的工作示例或文档。我需要打开一个串口,配置一个端口(设置速度,奇偶校验,停止位等),写入/读取二进制数据然后关闭。
我尝试使用https://github.com/japaric/serial.rs,但这个库已经过时了(它甚至不能在Rust 1.0上编译)。即使这样,这个库只提供了如何配置串口但不使用它的功能。
答案 0 :(得分:4)
根据操作系统的不同,有两种解决方案可以构建代码。 对于* nix OS serial.rs库应该适用于生锈0.11.0版本,但是为了支持rust-0.12.0,一个问题被打开但尚未关闭。
对于Windows的东西(mingw-w64),serial.rs不是一个简单的解决方案,因为这个lib是基于termios调用的,这些调用不容易为mingw设置。它来自mingw是针对msvcrt而不是针对glibc构建的(有关更多信息,请参阅here)。 在Windows上,一个简单的解决方案是使用rust FFI为teuniz编写像rs232这样的库的包装器。
使用mingw gcc构建库rs232;
在rust中创建一个包装器;
Windows的简短示例如下所示:
extern crate libc;
use libc::{c_int,c_uchar,c_uint};
use std::os;
//
#[link(name = "rs232")]
extern {
fn RS232_OpenComport(comport_number:c_int, baudrate:c_int) ->c_int;
fn RS232_SendByte(comport_number:c_int, byte:c_uchar)->c_int;
fn RS232_CloseComport(comport_number:c_int);
}
static COM10:c_int=9;
fn main() {
let y=unsafe{RS232_OpenComport(COM10, 115200)};
unsafe{
RS232_SendByte(COM10,101);
RS232_SendByte(COM10,100);
}
let cl=unsafe{RS232_CloseComport(COM10)};
}
答案 1 :(得分:3)
在UNIX上,串行端口由字符设备表示,可以通过用于文件I / O的普通系统调用来访问。关于串口的唯一补充是ioctl
,这就是你用来设置波特率和其他参数的方法。
答案 2 :(得分:1)
serial包工作正常。
答案 3 :(得分:0)
如果您需要能够列出串行设备(不仅仅是连接到它们),那么您需要serialport,它基于serial。
如果你想使用串口,你应该知道它被分成小箱子,你应该使用一个或另一个,这取决于你是在开发一个库还是一个可执行文件。查看the readme and documentation以获取更多信息。
这两种板条箱都是多平台的,并且有最近的更新,因此决定哪种API看起来更好。