如何在Rust中使用串口?

时间:2014-08-31 05:46:58

标签: rust serial-port

我需要在我的程序中通过串口执行简单的交换。我找不到任何与串口有关的工作示例或文档。我需要打开一个串口,配置一个端口(设置速度,奇偶校验,停止位等),写入/读取二进制数据然后关闭。

我尝试使用https://github.com/japaric/serial.rs,但这个库已经过时了(它甚至不能在Rust 1.0上编译)。即使这样,这个库只提供了如何配置串口但不使用它的功能。

4 个答案:

答案 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这样的库的包装器。

  1. 使用mingw gcc构建库rs232;

  2. 在rust中创建一个包装器;

  3. 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看起来更好。