Probleme mit Stop Bits
-
Hallo,
ich habe bei der seriellen Kommunikation Probleme bei den Stop-Bits.Wenn ich das Programm starte,wähle ich z.B. 1 Stop-Bit aus. -> Program OK
Dann ändere ich auf 2 Stop-Bits -> Programm OK
Ab jetzt funzt es nur noch mit 2 Stop-Bits. SetCommState schlägt sonst immer fehl.
Vielleicht könnt ihr mir helfen.
VS2005:
BOOL CSerial::Open() { if( m_bOpened ) return( TRUE ); char szPort[15]; DCB dcb; FillMemory(&dcb, sizeof(dcb), 0); wsprintf( szPort, "COM%d", m_nPortNumber ); m_hIDComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ); if( m_hIDComDev == INVALID_HANDLE_VALUE ) return( FALSE ); memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) ); memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); // Get the default port setting information GetCommState( m_hIDComDev, &dcb ); // Change the DCB structure settings dcb.BaudRate = m_nBaudRate; // Current baud dcb.ByteSize = m_nDataBits; // Number of bits/byte, 4-8 dcb.Parity = m_nParity; // 0-4=no,odd,even,mark,space dcb.StopBits = m_nStopBit; // 0,1,2 = 1, 1.5, 2 if( !SetCommState( m_hIDComDev, &dcb ) ) { DWORD dwError = GetLastError(); if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent ); if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent ); CloseHandle( m_hIDComDev ); return( FALSE ); } m_bOpened = TRUE; return( m_bOpened ); }
-
Zu erwähnen noch:
Wird das Programm aus VS2005 heraus gestartet funzt es
Wird das Programm selber durch doppelkl. aufgerufen funzt es nicht.
-
Ich rate Dir den DCB *immer* komplett zu setzen! Woher willst Du wissen, dass der "Default-Wert" dem entspricht was Du willst?