Zum Inhalt springen

COM-Port initialisieren


Narf!

Empfohlene Beiträge

Da sind ja 'ne ganze Menge Werte einzustellen.

In der MSDN habe ich auch nicht so recht was gefunden, wo die Werte erklärt werden.

Ich möchte den COM-Port so einstellen:

Baudrate: 9600

Parität: keine

Bitgröße: 8

Stopbit: 1

Flowcontrol: xon/xoff

Ich habe das mit BuildCommDCB("9600,n,8,1", &dcb) probiert, bekomme aber einen Fehler "Unbehandelte Ausnahme".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine DCB-Struktur wird auf dem Stack angelegt, also ist sie zunächst mit zufälligen Werten gefüllt. Da BuildCommDCB nur die Werte in der Struktur setzt, die auch im String stehen, ist die Struktur danach immer noch ungültig.

Füll zuerst mit GetCommState die Struktur mit den aktuellen Einstellungen der Schnittstelle, bevor du BuildCommDCB aufrufst, dann sollte das klappen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Narf!

BuildCommState("9600,n,8,1",&dcb);

Ich nehme an, dass im "richtigen" Code BuildCommDCB steht. Bist du sicher (sprich: hast du mit dem Debugger geprüft), dass genau an dieser Stelle eine Exception auftritt, und nicht irgendwann später? Bei mir läuft das nämlich einwandfrei.
Link zu diesem Kommentar
Auf anderen Seiten teilen

// ...
HANDLE hSerial = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
if( INVALID_HANDLE_VALUE == hSerial )
{
return GetLastError();
}

DCB dcb;
if( !GetCommState( hSerial, &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}

if( !BuildCommDCB( "9600,n,8,1", &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}

if( !SetCommState( hSerial, &dcb ) )
{
CloseHandle( hSerial );
return GetLastError();
}
// ...
[/CODE]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Narf!

Ich wollte eigentlich wissen, wo ich bei SetCommState die o.g. Werte eintragen soll.

Gar nicht. Wenn du nicht BuildCommDCB verwenden willst, musst du die Elemente der DCB-Struktur von Hand setzen:

dcb.BaudRate = CBR_9600;

dcb.fParity = FALSE;

dcb.ByteSize = 8;

dcb.StopBits = ONESTOPBIT;

SetCommState musst du in beiden Fällen aufrufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...