赞
踩
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。
串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线(GND)、发送(TX)、接收(RX)。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须和通讯协议保持一致;
1.项目配置
SerialPort 包名必须一致
启动串口
- public static SerialConnection getInstance() {
- return instance;
- }
-
- public void register(Handler mHander) {
- this.mHandler = mHander;
- }
-
- /**
- * 启动串口接受信息
- */
- public void startSerial(int rate) {
- lodg("[startSerial]......rate===>" + rate);
- try {
- //三个参数 1.哪个口 2.波特率 3.校验方式
- mSerialPort = new SerialPort(new File("/dev/ttyS1"), rate, 'o');
- } catch (Exception e) {
- lodg("[startSerial]......e===>" + e.toString());
- }
- if (mSerialPort != null) {
- mInputStream = mSerialPort.getInputStream();
- mOutputStream = mSerialPort.getOutputStream();
- }
- mRecvThread = new RecvThread();
- mRecvThread.start();
- }
-
- class RecvThread extends Thread {
- private boolean mExit = false;
-
- @Override
- public void run() {
- while (!mExit) {
- receiveSerial();
- }
- }
-
- public void exit() {
- mExit = true;
- }
- }
-
- /**
- * 接受串口信息
- */
- private void receiveSerial() {
- try {
- if (mInputStream != null) {
- int len = mInputStream.read(mUartReadBuffer);
- if (len > 0) {
- String serialStr = byte2String(mUartReadBuffer, len);
- lodg("serialStr: ===>" + serialStr);
- if (serialStr.length() > 0 && !serialStr.equals("00")) {
- dispatchCmds(serialStr);
- }
- }
- }
- } catch (Exception e) {
- lodg("[receiveSerial]......e===>" + e.toString());
- }
- }

发送串口信息
- /**
- * 发送串口信息
- *
- * @param cmd
- */
- public void sendSerial(final String cmd) {
- lodg("[sendSerial].....cmd===>" + cmd);
- new Thread() {
- @Override
- public void run() {
- super.run();
- byte[] test = hexStringToBytes(cmd);
- try {
- if (mOutputStream != null) {
- mOutputStream.write(test);
- mOutputStream.flush();
- }
-
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- }
- }.start();
- }

电脑调试串口工具
所需文件以及串口调试工具下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。