[QSerialDevice] Problème de parité
Bonjour, je suis en train d'interfacer un 16F886 avec un PC à l'aide d'une liaison RS232.
Je suis débutant avec Qt et assez peu à l'aise avec l'orienté objet donc j'espère ne pas avoir fait d'erreur grossière.
J'utilise la bibliothèque QSerialDevice pour piloter le port série du PC.
Afin de tester ma liaison série, mon µC émet la chaine de caractère "ABCD" suivie d'un line feed lors de sa mise sous tension (j'utilise le line feed comme caractère de fin de transmission, je n'ai pas mis en place de contrôle de flux matériel).
Afin d'être sûr que mon µC transmet bien les données, j'ai effectué un cat /dev/ttyS0 dans un terminal. Lors de la mise sous tension, le µC envoie bien la chaîne "ABCD"+LF.
Jusqu'ici, tout fonctionne.
Maintenant, on en vient à mon programme Qt. J'ai créé une classe pour gérer ma liaison série.
Voilà le code de l'initialisation du port série (je ne pense pas avoir fait d'erreur d'étourderie dans l'initialisation et j'ai vérifié que ces paramètres étaient bien correct en utilisant Termite sous windows) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| RS232::RS232(QObject *parent) : QObject(parent)
{
// Initialisation de la connexion série
port = new AbstractSerial(this);
connect(port, SIGNAL(readyRead()), this, SLOT(slotRead()));
port->setDeviceName("/dev/ttyS0");
if (!port->open(AbstractSerial::ReadWrite))
{
qDebug() << "Opening device error.";
}
if (!port->setBaudRate(AbstractSerial::BaudRate9600))
{
qDebug() << "Set baud rate " << AbstractSerial::BaudRate9600 << " error.";
}
if (!port->setDataBits(AbstractSerial::DataBits8))
{
qDebug() << "Set data bits " << AbstractSerial::DataBits8 << " error.";
}
if (!port->setParity(AbstractSerial::ParityEven))
{
qDebug() << "Set parity " << AbstractSerial::ParityEven << " error.";
}
if (!port->setStopBits(AbstractSerial::StopBits1))
{
qDebug() << "Set stop bits " << AbstractSerial::StopBits1 << " error.";
}
if (!port->setFlowControl(AbstractSerial::FlowControlOff))
{
qDebug() << "Set flow " << AbstractSerial::FlowControlOff << " error.";
}
} |
Et le code tout bête de la lecture du port série :
Code:
1 2 3 4 5
| void RS232::slotRead()
{
QByteArray ba = port->readAll();
qDebug() << ba.toHex();
} |
Pour rappel :
'A' = 0x41
'B' = 0x42
'C' = 0x43
'D' = 0x44
LF = 0x0A
Le qDebug de la fonction slotRead devrait donc me donner comme résultat "414243440a". Au lieu de ça, je récupère de façon systématique "414200440a".
Est-ce que quelqu'un a une idée de la source possible du problème que je rencontre ?
Merci d'avance pour vos réponses.