Win32 ::串行二进制通信

时间:2011-07-20 20:15:26

标签: perl serial-port perl-module

我正在尝试使用Win32 :: Serial端口(perl模块)与嵌入式系统上的UART进行通信。它似乎在发送数据方面工作正常,但出于任何原因它无法接收数据。我希望除了read()之外还有另一个函数可以显示读数据吗?

# Write Serial Data to Port in Little Endian Form
foreach my $intermValue (@writeData) {
    my $msb = int($intermValue/256);
    my $lsb = ($intermValue - $msb*256);

    # Writing LSB first and MSB after (Little Endian Form)
    print "Writing: LSB: ".$lsb." MSB: ".$msb."\n";
    $class->{"serialPort"}->transmit_char($lsb);
    $class->{"serialPort"}->transmit_char($msb);
}

# Read Data From Serial Port
my ($countIn, $recievedData) = $class->{"serialPort"}->read($expectedBytes);

由于

2 个答案:

答案 0 :(得分:0)

我记得,在Win32 ActivePerl上你可以像这样在文件名中指定端口:     打开(我的$ fh,'+> COM1')或死“COM1:$!”;     binmode($ FH);

我已经成功使用了这个,但我从未成功使用过Win32:Serial!也许有帮助?

答案 1 :(得分:0)

感谢您的回复,但事实证明库中有一个输入功能,使用它和1秒的睡眠我能够使我的模块工作。

# Write Serial Data to Port in Little Endian Form
foreach my $intermValue (@writeData) {
    my $msb = int($intermValue/256);
    my $lsb = ($intermValue - $msb*256);

    # Writing LSB first and MSB after (Little Endian Form)
    print "Writing: LSB: ".$lsb." MSB: ".$msb."\n";
    $class->{"serialPort"}->transmit_char($lsb);
    $class->{"serialPort"}->transmit_char($msb);
    }
    # Read Data From Serial Port
    sleep(1);
    my  $recievedData = $class->{"serialPort"}->input;