目录
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。