FT4232H Android开发 3 - USB转UART

6 篇文章 1 订阅

目录

1. 新建继承FTDevice的类usb2uart

2.  函数open

3. 函数close

4. 函数write

5. 函数read

6. 验证

6.1 发送数据

6.2 处理read的线程


FT4232H支持4路串口,选择第一路串口做LOOP实验,将AD0和AD1短接

1. 新建继承FTDevice的类usb2uart

public class usb2uart extends FTDevice{
    public usb2uart(Context context) {
        super(context);
    }

}

2.  函数open

打开串口设备,并设置串口的波特率、校验方式、数据位数,停止位数。

public int open(int baudrate, byte parity, byte dataBits, byte stopBits){
    int ret;
    ret = openDevice(D2xxManager.FT_BITMODE_RESET);
    if(ret < 0)
        return ret;
    ftDevice.setBaudRate(baudrate);
    ftDevice.setDataCharacteristics(dataBits, stopBits, parity);
    return FTDevice.RETURN_OK;
}

设备模式FT_BITMODE_RESET表示串口模式,即默认的模式是串口模式。

3. 函数close

与FTDevice的功能相同。

public int close(){
    return closeDevice();
}

4. 函数write

public void write(byte[] dat, int len){
    ftDevice.write(dat, len);
}

5. 函数read

public int read(byte[] dat, int maxLen){
    int num = 0;
    num = ftDevice.getQueueStatus();
    if(num <= 0)
        return 0;

    if(num > maxLen){
        ftDevice.read(dat, maxLen);
        return maxLen;
    }else{
        ftDevice.read(dat, num);
        return num;
    }
}

从UART读数据,如果没有数据直接返回0,如果数据长度大于数组长度,则只读取数组长度的数据。返回值为从UART中读到的数据长度。

6. 验证

6.1 发送数据

在button的Click事件中添加

public void onClick(View view) {
    String strWrite;
    strWrite = etSend.getText().toString();
    if(strWrite.length() == 0)
        return;
    byte[] byteWrite = strWrite.getBytes();
    ftD2xxDev.write(byteWrite, byteWrite.length);
}

etSend是EditText。

6.2 处理read的线程

线程中一直读取串口数据,如果有数据就把数据读入到数组readData中,然后发消息界面更新。

   private class RecvRunnable implements Runnable {
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                }
                if (threadStop == true)
                    break;

                if (threadPause == true)
                    continue;

                if(ftD2xxDev == null)
                    break;

                readNum = ftD2xxDev.read(readData, 1024);
                Log.i("Debug", "read num:" + readNum);
                if (readNum == 0) {
                    continue;
                }

                Log.i("Debug", "read num:" + readNum);
                Message message = myHandler.obtainMessage();
                message.arg1 = 111;// 值可自定义
                myHandler.sendMessage(message);
            }
        }
    };
    RecvRunnable recvRunnable = new RecvRunnable();
    Thread recvThread;

在打开设备的按键处理中添加

threadPause = false;
threadStop = false;
recvThread = new Thread(recvRunnable, "UartRecv");
recvThread.start();

在关闭设备中添加

threadPause = true;
threadStop = true;

收到消息后更新TextView

    static Handler myHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(@NonNull Message message) {
            if (message.arg1 == 111) {
                //readText.setText("");
                for(int i = 0; i < readNum; i++){
                    tvRecv.append("" + (char)readData[i]);
                }
            }
            return false;
        }
    });

发送字符串“abc”,接收相同的数据,验证OK。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值