最好先GetCommState,然后对DCB中需要改的成员修改,然后再SetCommState
DCB的成员很多,不止你写的那几个

解决方案 »

  1.   

    前面的程序我没写出来,有getcommstate
      

  2.   

    DCB dcb; //设备控制模块 CString strCom;
    strCom.Format("COM%d",m_intComPort);
    m_hCom = CreateFile(strCom,GENERIC_READ|GENERIC_WRITE, 
    0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED ,NULL);
    if(m_hCom == INVALID_HANDLE_VALUE)
    {
    AfxMessageBox("系统设备控制初始化失败!CControlCom::Init");
    return FALSE;
    }

    BOOL Error = SetupComm(m_hCom,128,128); //创建输入输出队列缓存
    if(!Error)
    {
    CloseHandle(m_hCom);
    return FALSE;
    } Error = GetCommState(m_hCom,&dcb); //得到串口状态 if(!Error)
    {
    CloseHandle(m_hCom);
    return FALSE;
    } //设置COM通信参数
    dcb.BaudRate    = 9600;
    dcb.ByteSize    = 8;
    dcb.Parity      = NOPARITY;
    dcb.StopBits    = ONESTOPBIT; Error = SetCommState(m_hCom,&dcb);
    if(!Error)
    {
    CloseHandle(m_hCom);
    return FALSE;
    } EscapeCommFunction(m_hCom,SETRTS);//设置为发送状态
      

  3.   


      ByteSize使用6,7,8时,StopBits必须使用大于1的位,这是规定.看DCB结构帮助的Res
      

  4.   

    sprintf(szBaud,"baud=%d parity=%c data=%d stop=%d",baud,parity,databits,stopsbits);
    if (GetCommState(m_hCom,&m_dcb))
    {
    m_dcb.fRtsControl = RTS_CONTROL_ENABLE; // 打开设备时允许RTS线,并保持允许状态
    if (BuildCommDCB(szBaud,&m_dcb))
      

  5.   

    DCB Dcb;
    GetCommState(hCom1, &Dcb);
    Dcb.BaudRate =9600;
    Dcb.ByteSize = 8;
    ....
    SetCommState(hCom1, &Dcb);
      

  6.   

    短接TXD&RXD可以模拟发送和接收。