问题描述
最近在做学校的工程训练,需要用到java与串行口通信,单片机一直不停发数据用串口调试助手接受没有问题可PC机上的java程序读取数据,一读取单片机就不再发送数据,应该是java程序的问题,看过好多帖子都没有找到有用的信息,求大神帮助,等下贴出代码
解决方案
解决方案二:
packagelova.comm;importjava.io.BufferedInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.TooManyListenersException;importjavax.comm.CommPortIdentifier;importjavax.comm.NoSuchPortException;importjavax.comm.PortInUseException;importjavax.comm.SerialPort;importjavax.comm.SerialPortEvent;importjavax.comm.SerialPortEventListener;importjavax.comm.UnsupportedCommOperationException;publicclassCommUtilimplementsSerialPortEventListener{privateInputStreamins;privateOutputStreamous;privateSerialPortport;//串口引用privateCommPortIdentifierportId;publicCommUtil(Stringname){try{portId=CommPortIdentifier.getPortIdentifier(name);}catch(NoSuchPortExceptione){e.printStackTrace();}//开启串口try{port=(SerialPort)portId.open("My"+name,1000);}catch(PortInUseExceptione){e.printStackTrace();}//设置参数try{port.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);}catch(UnsupportedCommOperationExceptione){e.printStackTrace();}try{port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);}catch(UnsupportedCommOperationExceptione1){e1.printStackTrace();}//获取输入输出流try{ins=port.getInputStream();ous=port.getOutputStream();}catch(IOExceptione){e.printStackTrace();}//当有数据是通知port.notifyOnDataAvailable(true);//给串口添加监听器try{port.addEventListener(this);}catch(TooManyListenersExceptione){e.printStackTrace();}}//监听器publicvoidserialEvent(SerialPortEventarg0){switch(arg0.getEventType()){caseSerialPortEvent.BI:System.out.println("BI");break;caseSerialPortEvent.CD:System.out.println("CD");break;caseSerialPortEvent.CTS:System.out.println("CTS");break;caseSerialPortEvent.DSR:System.out.println("DSR");break;caseSerialPortEvent.FE:System.out.println("FE");break;caseSerialPortEvent.OE:System.out.println("OE");break;caseSerialPortEvent.PE:System.out.println("PE");break;caseSerialPortEvent.RI:System.out.println("RI");break;caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:System.out.println("OUTPUT_BUFFER_EMPTY");break;//当有数据时读取数据caseSerialPortEvent.DATA_AVAILABLE:System.out.println("DATA_AVAILABLE");try{while(ins.available()>0){intt=ins.available();System.out.println("len:"+t);byte[]arr=newbyte[t];ins.read(arr);Stringtext=newString(arr).trim();System.out.println("data:"+text);}//while(true){//System.out.println(ins.read());//}}catch(IOExceptione){e.printStackTrace();}break;}}//关闭串口publicvoidclosePort(){if(port!=null){port.close();}}publicstaticvoidmain(String[]args){newCommUtil("COM4");}}
解决方案三:
晚上再来希望有人回
解决方案四:
我也遇到类似的问题,Java程序发送byte型的值0x01(16进制),串口助手收到的是0xE1(16进制)。同学你解决了么!
解决方案五:
问题解决了!
解决方案六:
引用4楼的回复:
问题解决了!
兄弟能把你的程序源码发我下吗?谢谢了280115295@qq.com
解决方案七:
引用5楼的回复:
引用4楼的回复:问题解决了!兄弟能把你的程序源码发我下吗?谢谢了280115295@qq.com
这位大哥能把收到的程序源码发我一份么?多谢~~~~451517251@qq.com
解决方案八:
楼上几位,我最近也在做Java串口,做了好久了都不能读取串口也给我发一份吧jw20082009@qq.com
解决方案九:
我发上来的程序没有错最后发现时单片机的晶振问题将12M的晶振换位11.0592M的问题解决主要是12M晶振时,计算波特率值会有近9%的误差。
解决方案十:
楼上兄弟把Java串口程序发我一份好吗?