perl 串口 linux,Perl的串口操作Win32::SerialPort

use Win32::SerialPort ;    //引用SeriallPort模块

$PORTNAME = "COM7";  //设置串口号,大于9时候必须要加 "COM17"

my $ob = Win32::SerialPort->new($PORTNAME) || die "open com failed";

print "open com success\n";

eval  {

$ob -> baudrate( 115200 );    #如果使用超过115200的波特率,执行脚本前先用串口通信工具用对应波特率打开串口,发个AT。

$ob -> parity( 'none' );

$ob -> databits( 8 );

$ob -> stopbits( 1 );

$ob -> handshake( 'rts' );  #硬件流控

#$ob -> handshake( 'none' );  #无流控

#$ob->buffers(4096, 4096);

};

if  ($@) { die   ' set $PORTNAME properties failed ' ;}

$ob -> write_settings ||  die   " CANNOT WRITE $PORTNAME DRIVER " ;

$ob->write ("ATI\r\n");   //写到串口

sleep(1);

my($count, $string) = $ob->read(100);  //从串口读100字节数据,读到的数据长度$count, 数据赋值给$string

if(defined($string))   //读到了数据

{

print $string;

}

$ob->close;   //关闭串口

undef   $ob ;

exit(0);

#操作dtr引脚的方法

$ob->dtr_active(T);   #true: 拉低;

$ob->dtr_active(F);   #false:拉高

$ob->pulse_dtr_on($milliseconds);    #avtive拉低$milliseconds毫秒,再拉高$milliseconds毫秒

$ob->pulse_dtr_off($milliseconds);   #inavtive拉高$milliseconds毫秒,再拉低$milliseconds毫秒

#发送十六进制数

$ob->transmit_char(0x1A);

#transmit_char的方法在使用USB虚拟的串口发送时会失效,改用下面的方式:

$str=pack(h6,"e70bA1");  # h  十六进制字符串(低位在前),实际发送数据为7E B0 1A

$ob->write($str);

#或者

$ob->write(pack(H6,"7EB01A"));   # H  十六进制字符串(高位在前)

http://blog.csdn.net/jqzw/article/details/7176259

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值