我的串口初始化不对,请问有什么问题吗?
sCommPort[0]='c';
sCommPort[1]='o';
sCommPort[2]='m';
sCommPort[3]=com+'1';
sCommPort[4]=0x00;
strcpy(sComm,"\\\\.\\");
strcat(sComm,sCommPort);
// AfxMessageBox(sComm);
hCom=CreateFile(sComm,GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);

COMMTIMEOUTS CommTimeOuts;
//指定端口通讯事件
SetupComm(hCom, 4096, 4096);
//设置端口缓冲
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = iReadTimeout;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = iWriteTimeout;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCom, &CommTimeOuts);

DCB Dcb;
Dcb.DCBlength = sizeof(DCB);
GetCommState(hCom,&Dcb);
if(1)//bDefault)
{
Dcb.BaudRate=iBaud;//9600;
Dcb.ByteSize=8;
Dcb.Parity=1;
Dcb.StopBits=1;
Dcb.fOutxDsrFlow = false;
Dcb.fOutxCtsFlow = false;
Dcb.fDtrControl = DTR_CONTROL_ENABLE;
Dcb.fRtsControl = DTR_CONTROL_ENABLE;
Dcb.fInX = Dcb.fOutX = false;
}
else
{
Dcb.BaudRate=CommDcb.BaudRate;
Dcb.ByteSize=CommDcb.ByteSize;
Dcb.Parity=CommDcb.Parity;
Dcb.StopBits=CommDcb.StopBits;
} Dcb.XonChar = ASCII_XON;
Dcb.XoffChar = ASCII_XOFF;
Dcb.XonLim = 100;
Dcb.XoffLim = 100;
Dcb.fBinary = TRUE;
Dcb.fParity = TRUE;
// AfxMessageBox("1");
if(!SetCommState(hCom,&Dcb))
return false;// AfxMessageBox("2");
bCommOpenOk=true; return true;

解决方案 »

  1.   

    这段程序不对:
    sCommPort[0]='c';
    sCommPort[1]='o';
    sCommPort[2]='m';
    sCommPort[3]=com+'1';
    sCommPort[4]=0x00;
    strcpy(sComm,"\\\\.\\");
    strcat(sComm,sCommPort);
    // AfxMessageBox(sComm);
    hCom=CreateFile(sComm,GENERIC_READ|GENERIC_WRITE,0,NULL,
    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
    NULL);
    应该是:
    TCHAR tcCom[12];
    int i = 1;
    HANDLE hCom = NULL; _stprintf(tcCom,_T("COM%d"),i);

    hCom=CreateFile(tcCom,GENERIC_READ|GENERIC_WRITE,0,NULL,
    OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
    NULL);
    //指定端口通讯事件
    if(!SetupComm(hCom, 4096, 4096))
    {
    AfxMessageBox(_T("Init COM failed!"));
    return;
    }