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