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?


Anmelden zum Antworten