RS232 sous Linux

cs_Robou Messages postés 2 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 8 mai 2003 - 8 mai 2003 à 21:47
 Utilisateur anonyme - 2 oct. 2008 à 17:46
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

angsthase Messages postés 72 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 11 avril 2005 1
25 avril 2005 à 16:35
<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>
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
12 mai 2003 à 00:42
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 :)
Utilisateur anonyme
2 oct. 2008 à 17:46
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;
}
Rejoignez-nous