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  十六进制字符串(高位在前)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值