C++ 用d2x写入数据

C++ 用d2x写入数据,c++,serial-port,d2xx,C++,Serial Port,D2xx,我有一个简单的程序,尝试使用FTDI D2xx库通过串行端口写入数据 程序只是打开端口,并尝试以一定速率写入数据。在我的示波器上,我偶尔会看到1缺失。我也只能通过调用SetBreakOn,然后再调用SetBreakOff来查看数据。如果我不这样做,我就看不到范围上的任何数据 我在这里做错什么了吗?在我的循环中,一旦数据被发送,在我写回缓冲区之前,0会被传输吗 #include <iostream> #include <windows.h> #include <std

我有一个简单的程序,尝试使用FTDI D2xx库通过串行端口写入数据

程序只是打开端口,并尝试以一定速率写入数据。在我的示波器上,我偶尔会看到1缺失。我也只能通过调用SetBreakOn,然后再调用SetBreakOff来查看数据。如果我不这样做,我就看不到范围上的任何数据

我在这里做错什么了吗?在我的循环中,一旦数据被发送,在我写回缓冲区之前,0会被传输吗

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <ftd2xx.h>
#include <stdlib.h>
#include "string.h"
#include <unistd.h>

int main(int argc, char *argv[])
{
   uint32_t numDevs;
    FT_HANDLE FT_handle;
    FT_STATUS FT_status;    // status of the FT 232 chip
    
    //Open Device
    FT_STATUS ftStatus;      
    char * value = "FT4T6TXN";
    ftStatus = FT_OpenEx(value,FT_OPEN_BY_SERIAL_NUMBER, &FT_handle);

    if(ftStatus == FT_OK){
        printf("successful open!\n");
    }else{
        printf("failure open! %d\n", ftStatus);
    }

    UCHAR Mask = 0xFF; //all output
    UCHAR Mode = 0x04; //Selects the Synchronous Bit Bang Mode

    ftStatus = FT_SetBitMode(FT_handle,Mask,Mode);
    if (ftStatus == FT_OK) {
        // synchronous Bit bang Mode enabled  
        printf("sync bit mode!\n");
    }
    else {
        // FT_SetBitMode FAILED!
        printf("setBitModeFailed!\n");
        return -1;
    }

    
    DWORD BaudRate;
    BaudRate = 366;
    FT_status  = FT_SetBaudRate(FT_handle,BaudRate);
    if(FT_status != FT_OK){
        printf("BAUD RATE SET FAILED! \n");
        return -1;
    }

    uint32_t bytesWritten = 0;    
    UCHAR Buffer = 0x01;    // data to be written to the port
    
    //set flow control
    FT_status = FT_SetFlowControl(FT_handle, FT_FLOW_RTS_CTS, NULL, NULL);
    if(FT_status != FT_OK){
        printf("flow not okay\n");
    }

    //Begin Looping Inf
    while(true){
        //I was unable to see Data without calling this?
        FT_SetBreakOn(FT_handle);
        FT_SetBreakOff(FT_handle);

        //WRITE
        FT_status = FT_Write( FT_handle,      // handle to the chip
                        &Buffer,        // address of the data
                        sizeof(Buffer), // Size of the Buffer
                        &BytesWritten   // Number of bytes written 
                    );

        sleep(1);
  
     if(FT_status != FT_OK){
         printf("write not successful! %d \n", FT_status);
     }

    }
   FT_Close(FT_handle); // Close the Serial port connection   
}
#包括
#包括
#包括
#包括
#包括
#包括“string.h”
#包括
int main(int argc,char*argv[])
{
uint32_t numDevs;
FT_手柄FT_手柄;
FT_STATUS FT_STATUS;//FT 232芯片的状态
//开放式设备
FTU状态ftStatus;
char*value=“FT4T6TXN”;
ftStatus=FT_OpenEx(值、FT_OPEN_BY_序列号和FT_句柄);
如果(ftStatus==FT_正常){
printf(“成功打开!\n”);
}否则{
printf(“故障打开!%d\n”,ftStatus);
}
UCHAR Mask=0xFF;//所有输出
UCHAR Mode=0x04;//选择同步位模式
ftStatus=FT_设置模式(FT_手柄、遮罩、模式);
如果(ftStatus==FT_正常){
//启用同步位爆炸模式
printf(“同步位模式!\n”);
}
否则{
//FT_设置模式失败!
printf(“setBitModeFailed!\n”);
返回-1;
}
德沃德波特率;
波特率=366;
FT_状态=FT_设定波特率(FT_句柄,波特率);
如果(FT_状态!=FT_正常){
printf(“波特率设置失败!\n”);
返回-1;
}
uint32\u t字节写入=0;
UCHAR Buffer=0x01;//要写入端口的数据
//设置流量控制
FT_状态=FT_设置流量控制(FT_句柄、FT_流量、RTS_CTS、NULL、NULL);
如果(FT_状态!=FT_正常){
printf(“流量不正常\n”);
}
//开始循环Inf
while(true){
//如果不调用此,我无法查看数据?
FT_SetBreakOn(FT_手柄);
FT_后置断开(FT_手柄);
//写
FT_status=FT_Write(FT_句柄,//芯片句柄
&缓冲区,//数据的地址
sizeof(Buffer),//缓冲区的大小
&字节写入//写入的字节数
);
睡眠(1);
如果(FT_状态!=FT_正常){
printf(“写入不成功!%d\n”,FT\U状态);
}
}
FT_Close(FT_handle);//关闭串行端口连接
}