uart mit Mfc



  • Hi;

    Ich bin gerad dabei einen Microcontroller via RS-232 vom PC aus zu steuern. Das senden von Daten vom PC zum myC funktioniert aber wenn ich Daten vom myC zum PC schicke, empfängt der PC sie mit 1-2 Sekunden Verspätung.
    Ich bin der Meinung, dass das Problem beim PC liegt und zwar bei der UART(Rs232) -Routine.
    Fertige RS232 Tools funktionieren, sie erhalten die Daten ohne Verzögerung.
    Kann mir jemand bei diesem Problem weiterhelfen? wäre sehr dankbar 😉
    Code muss nur RXD und TXD unterstützen also kein CTR oder Sonstiges.
    Mein aktueller C-Code:
    **********************************************************************
    //class Serial

    BOOL Serial::OpenCOM()
    {
    //Filehandle
    fh=CreateFile(com,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,0);
    if(fh==INVALID_HANDLE_VALUE)
    return 1;

    //Parameter
    CString Param;
    Param.Format("%s:9600,n,8,1",com);
    DCB dcb;
    memset(&dcb,0,sizeof(DCB));
    dcb.DCBlength=sizeof(DCB);
    BuildCommDCB(Param,&dcb);
    SetCommState(fh,&dcb);

    //TIMEOUTS
    COMMTIMEOUTS cto;
    memset(&cto,0,sizeof(cto));
    GetCommTimeouts(fh,&cto);
    cto.ReadIntervalTimeout=0;
    cto.ReadTotalTimeoutMultiplier=0;
    cto.ReadTotalTimeoutConstant=8000;
    SetCommTimeouts(fh,&cto);

    return TRUE;
    }
    BOOL Serial::WriteCOM(CString text)
    {
    DWORD BytesWritten=0;
    int erg=WriteFile(fh,text,text.GetLength(),&BytesWritten,NULL);
    if((!erg||BytesWritten)!=text.GetLength())
    return FALSE;
    else
    return TRUE;
    }

    CString Serial::ReadCOM(int len)
    {
    DWORD bytesToRead = len,
    bytesRead = 0;
    char readBuf[32768];

    int erg = ReadFile(fh,readBuf,bytesToRead,&bytesRead,NULL);
    if (!erg/||bytesToRead!=bytesRead/) return "";
    readBuf[bytesRead] = 0;
    CString cs = readBuf;
    return cs;
    }
    BOOL Serial::CloseCOM()
    {
    if(fh!=INVALID_HANDLE_VALUE)
    {
    CloseHandle(fh);
    return TRUE;
    }
    else
    return FALSE;
    }
    void Serial::SetCOM(CString schnittstelle)
    {
    com=schnittstelle;
    }


Anmelden zum Antworten