首先,遇事不决先百度。
然后发现百度出来的老哥们都推荐一个叫RXTXComm的上古坑货,本人在aarch64-linux平台被坑的头都大了,期间遇到了找不到串口,读不到串口列表,写串口时flush()函数崩溃,读串口时read()直接崩溃等众多问题,听老哥们的建议换了github上的全新版本之后连设置串口属性都不行了,遂放弃改用jSerialComm。
首先给各位贴上jSerialComm的源码链接 https://github.com/Fazecast/jSerialComm ,同时所有可以直接用的jar也在release里。各位可以选择直接使用或者自己编译。
当然由于网络的不稳定性,各位很有可能上不了github,这里给大家提供百度网盘的链接(CSDN的积分下载就是s*b):
链接:https://pan.baidu.com/s/1-S1w4wTa7qRGWb3Zmr3jsw
提取码:rxtx
jSerialComm的使用方法很简单,类名和方法名都没有整活,所以大家按照印象中的串口通信来就行。以下为测试代码。当然测试代码也在网盘的链接里,因为CSDN的登录复制也是s*b。
import com.fazecast.jSerialComm.*;
public class SerialPortManager {
private SerialPort mSerialPort;
public SerialPortManager() {
mSerialPort = null;
}
public void init(String portName) {
mSerialPort = SerialPort.getCommPort(portName);
mSerialPort.openPort();
mSerialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);
mSerialPort.setComPortParameters(38400, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
mSerialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
}
public void close() {
if (mSerialPort != null && mSerialPort.isOpen()) {
mSerialPort.closePort();
}
}
private int write(byte[] data) {
if (mSerialPort == null || !mSerialPort.isOpen()) {
return 0;
}
return mSerialPort.writeBytes(data, data.length);
}
private int read(byte[] data) {
if (mSerialPort == null || !mSerialPort.isOpen()) {
return 0;
}
return mSerialPort.readBytes(data, data.length);
}
public int readWriteTest(String portName)
{
init(portName);
byte[] order = {(byte)0xA5,(byte)0x5A,(byte)0x02,(byte)0x00,(byte)0xFD};
write(order);
byte[] data = new byte[100];
try{
int i=0;
while (mSerialPort.bytesAvailable() < 6 && i++ < 100)
Thread.sleep(20);
}catch(Exception e){}
int len = read(data);
if(data == null)
{
close();
return -1;
}
System.out.println(len);
for(int i=0;i<len;i++)
{
System.out.format("%x ",data[i]);
}
close();
return ans;
}
public static void main(String[] args)
{
SerialPortManager sm = new SerialPortManager();
sm.readWriteTest("ttyTHS0");
}
}
将jar和代码放在同一个目录,测试代码的编译运行命令如下:
javac -cp jSerialComm-2.6.2.jar:. SerialPortManager.java
java -cp jSerialComm-2.6.2.jar:. SerialPortManager
放入项目的话百度吧,我也就弄个demo。。。