RS232 sous Linux

Signaler
Messages postés
2
Date d'inscription
jeudi 8 mai 2003
Statut
Membre
Dernière intervention
8 mai 2003
-
 Utilisateur anonyme -
Bonjour !!

Je suis en BTS informatique industriel et je dois faire un petit programme en C++ qui me permettra de lire (d'acquérir) des trames sur le port série RS232 .
Mon problème est simple : je n'y arrive pas car beaucoup d'erreur avec lesquels j'ai du mal .
Je remercie d'avance quiconque peut m'aider .
Romain :sad)

3 réponses

Messages postés
72
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
11 avril 2005
1
<SUB><SUP>Pour communiquer avec le port com c'est :
int i = open("/dev/ttys0",...

ttyS0 = >com1
ttyS1 => com 2......

pour l'usb c'est ttyUSB0......</SUP></SUB>
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Pour envoyer/recevoir par le port com1 sous linux il suffit d'ouvrir un fichier spécial je crois que c'est /dev/com1

Core Breaker :)

Bonjour !!

J'ai ecris un bout de code qui me permet de lire sur le port usb et d'initialiser la com.
En gros, je pilote une telecommande RF avec le recepteur en USB.
Le souci c que quand j'execute mon code, le premier appuie sur la telecommande est pris en compte et apres il se passe environs 20s pour que je vois qq chose.

Je joint le code si qq'un a une idée .... Thx a lot ...

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>

int main(int argc, char* argv[])
{
        if (argc!=2)
        {
                printf("Usage : %s /dev/qqchose\n",argv[0]);
                return -1;
        }

// Ouverture du device
// O_RDWR : fichier ouvert en lecture et en ecriture.
// O_NOCTTY : le programme ne control pas le terminal.
// O_NDELAY : pas d'attente de changement de ligne sur le signal DCD.
// Usage : Le nom du peripherique est passe en paramatre.

        int fd;
        struct termios options;
         if(fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY) < 0)
        {
                perror("Impossible d'ouvrir le perpipherique");
                exit(1);
        }

// fcntl permet de definir l'etat du port serie
        fcntl(fd, F_SETFL, FNDELAY);

// Options 96008N1
        tcgetattr(fd, &options);
        cfsetispeed(&options, B9600);
        cfsetospeed(&options, B9600);
        options.c_cflag |= (CLOCAL | CREAD);
        options.c_cflag &= ~PARENB;
        options.c_cflag &= ~CSTOPB;
        options.c_cflag &= ~CSIZE;
        options.c_cflag |= CS8;
        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
// cfmakeraw(&options);

        if (write(fd, "ATZ\r", 4) < 0)
        {
                perror("write:");
        }
        close(fd);
        return 0;
}