Qt - Serial port

From XennisWiki
Jump to: navigation, search

Verwendete Hard- und Software

Crumb168 V2.3 AVR ATmega Modul
Bluecontroller (BCA8-BTM-328P-BOOT)

Ausführliche Informationen zum Crumb, zum Bluecontroller und allgemein über UART findest du in den Artikel: AVR-GCC - UART, Bluecontroller!

Hardware

Software (Unter Windows 7)

  • Qt SDK 1.2.1 (Windows 32/64)
  • QextSerialPort 1.2rc
  • Getestet für Qt 4.8.1 for Desktop - MinGW (QT SDK)

Code

Einstellungen und Resultat

Das Programm muss du, wie in den Bildern zu sehen, einstellen. Dort siehst du auch schon das Resultat:

  • Der Mikrocontroller sendet in regelmäßigen Abständen Hello bzw. Was
  • Sendet man ein x, erhält man ein World bzw. HalloWelt von ihm zurück

Crumb

Crumb168 V2.3 an COM3

QextSerialPort Demo - Crumb Einstellungen.png

Bluecontroller

Bluecontroller BCA8-BTM-328P-BOOT an COM6

QextSerialPort Demo - Bluecontroller Einstellungen.png

Fehler und Probleme

qwineventnotifier_p_h - No such file or directory

Ausführliche Hilfe: qwineventnotifier_p_h

  • Gehe in das Verzeichnis C:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore (Pfad ggf. angepassen)
  • Erstelle den Ordner private und in diesem die Datei qwineventnotifier_p.h mit den folgendem Inhalt:
#include "../../../../../../../QtSources/4.8.1/src/corelib/kernel/qwineventnotifier_p.h"
  • Exestiert bei dir der Ordner C:\QtSDK\QtSources bzw. C:\QtSDK\QtSources\4.8.1 nicht:
    • Führe SDKMaintenanceTool.exe (im Wurzelverzeichnis des Qt SDKs) aus > Package manager
    • Unter QtSDK > Miscellaneous > QT Sources > dann die entsprechenden Sources auswählen und den Installationsanweisungen folgen

DEVICE_NOTIFY_ALL_INTERFACE_CLASSES was not declared

Fehlermeldung

C:\PFAD\qextserialport-1.2rc\src\qextserialenumerator_win.cpp:258: Fehler:'DEVICE_NOTIFY_ALL_INTERFACE_CLASSES' was not declared in this scope

Lösung

In der Datei qextserialenumerator_win.cpp findest du ab Zeile 258:

    DWORD flags = DEVICE_NOTIFY_WINDOW_HANDLE|DEVICE_NOTIFY_ALL_INTERFACE_CLASSES;
    if (::RegisterDeviceNotification((HWND)notificationWidget->winId(), &dbh, flags) == NULL) {
        QESP_WARNING() << "RegisterDeviceNotification failed:" << GetLastError();
        return false;
    }

Dieses musst du einfach auskommentieren. (Vermutlich gibt es eine bessere Lösung, aber diese funktioniert)

//    DWORD flags = DEVICE_NOTIFY_WINDOW_HANDLE|DEVICE_NOTIFY_ALL_INTERFACE_CLASSES;
//    if (::RegisterDeviceNotification((HWND)notificationWidget->winId(), &dbh, flags) == NULL) {
//        QESP_WARNING() << "RegisterDeviceNotification failed:" << GetLastError();
//        return false;
//    }

Baud rate 115200 steht nicht zur Auswahl

Da die Baud rate 115200 nicht in der GUI zur Auswahl steht, musst du die Datei dialog.cpp (ab Zeile 19) wie folgt anpassen:

    ui->baudRateBox->addItem("1200", BAUD1200);
    ui->baudRateBox->addItem("2400", BAUD2400);
    ui->baudRateBox->addItem("4800", BAUD4800);
    ui->baudRateBox->addItem("9600", BAUD9600);
    ui->baudRateBox->addItem("19200", BAUD19200);
    // ADD: Die folgende Zeile wurde hinzugefügt
    ui->baudRateBox->addItem("115200", BAUD115200);
    ui->baudRateBox->setCurrentIndex(4);

Siehe auch