Java串口编程学习2-读串口

摘要:
如果串行端口读到乱码,则:1.波特率可能设置不正确。2.数据编码格式可能不是importgnu。io.*;导入java.awt.*;导入java.awt.event。行动事件;导入java.awt.event。ActionListener;导入java.awt.event。WindowAdapter;导入java.awt.event.Window

如果读串口出现乱码,则:

1.可能是波特率设置不对

2.可能是数据编码格式不对

import gnu.io.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;

/**
 * Created by gbr on 13-12-12.
 */

class R_Frame extends Frame implements Runnable, ActionListener, SerialPortEventListener{
    static CommPortIdentifier portId;
    static Enumeration portList;
    InputStream inputStream;

    SerialPort serialPort;
    Thread readThread;
    String str = "";
    TextField out_message = new TextField("上面文本框显示接收到的数据");
    TextArea in_message = new TextArea();
    Button btnOpen = new Button("Open Comm");
    R_Frame(){
        super("串口接收数据");
        setSize(200, 200);
        setVisible(true);
        btnOpen.addActionListener(this);
        add(out_message, "South");
        add(in_message, "Center");
        add(btnOpen, "North");
    }

    public void actionPerformed(ActionEvent event){
        portList = CommPortIdentifier.getPortIdentifiers();
        while (portList.hasMoreElements()){
            portId = (CommPortIdentifier)portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
                if (portId.getName().equals("COM8")){
                    try{
                        serialPort = (SerialPort)portId.open("ReadComm", 2000);
                        out_message.setText("已经打开串口COM8,正在接收数据...");
                    } catch (PortInUseException e) {
                        out_message.setText("端口已被占用!");
                        e.printStackTrace();
                    }
                    try{
                        serialPort.addEventListener(this);
                    }catch (TooManyListenersException e){
                        out_message.setText("监听异常!");
                        e.printStackTrace();
                    }
                    serialPort.notifyOnDataAvailable(true);
                }
            }
        }
        readThread = new Thread(this);
        readThread.start();
    }
    public void run(){
        try{
            Thread.sleep(20);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

    public void serialEvent(SerialPortEvent event){
        try{
            serialPort.setSerialPortParams(115200,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
        }catch (UnsupportedCommOperationException e){
            e.printStackTrace();
        }

        byte[] readBuffer = new byte[200];
        try{
            inputStream = serialPort.getInputStream();
        }catch (IOException e){
            e.printStackTrace();
        }

        try{
            while (inputStream.available() > 0){
                int numBytes = inputStream.read(readBuffer);
            }
            str = new String(readBuffer);
            in_message.append( str + "
" );
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

public class ReadComm {
    public static void main( String[] args ){
        R_Frame R_win = new R_Frame();
        R_win.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
                //super.windowClosing(e);
            }
        });
        R_win.pack();
    }
}

免责声明:文章转载自《Java串口编程学习2-读串口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇三端稳压器各个参数解释Linux 搭建 Jenkins下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32CubeIDE使用printf串口打印

在USART的初始化文件中添加如下代码 #include "stdio.h" /*USER CODE BEGIN 0 */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { //注意下面第一个参数是&husart1...

Centos设置串口波特率

1、stty查看串口参数 stty -F /dev/ttyS0 -a查看串口1(/dev/ttyS0)当前的参数,包括波特率、数据位等。 2、stty设置串口参数 stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8 该命令将串口1(/dev/ttyS0)设置成115200波特率,8位数据模式。一般情况下设置...

STM32一键下载电路设计原理

先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计: STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表: BOOT0=1,BOOT1=0:串口下载模式; BOOT0=0,BOOT1=X:程序启动模式,从内部flash启动。 设计思路:串口一键下载需要做的就是下载时,为串口下载模式,下载完...

关于51单片机串口通讯中向上位机发送字符的讨论

在调试串口通讯过程中搞清楚几个配合问题: 使用Keil带的C51库函数puts、printf之前必须置TI=1; 蓝色(一)处可以使用ES=0、ES=1,这时串口中断中(二)处,有无TI=0均可; 如果(一)处不使用ES=0、ES=1,这是串口中断中(二)处,不能使用TI=0; puts发送完字符串后自动发换行符' ',printf需要手工加上换行符;...

STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)

数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232和485电平的区别硬件外围芯片,波特率(反映传一位的时间),起始位和停止位,数据宽度,校验,硬件流控制,相应连接电脑时的接口怎么样的。配置,使用函数,中断,查...

C# 解决串口接收数据不完整

方法1:使 用缓存机制完成。首先通过定义一个成员变量List<byte> buffer = new List<byte> (4096);用来存放所有的数据,在接收函数里,通过buffer.AddRange()方法不断地将接收到的数据加入到buffer中,并同时对 buffer中的数据进行检验,如果达到一定的长度并且校验结果正确(校验...