IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Liaison RS232 en C sous linux [Non suivi]


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Liaison RS232 en C sous linux
    Bonjour, je suis en fin de 2éme année de BTS IRIS (Informatique et Réseaux pour l'Industrie et les Services Techniques.)

    Afin de cloturer mon rapport de projet, he fais appel à vous. Lors de mon projet, j'ai repris du code du projet commencé l'année précédesnte, il s'agit d'une liaisopn entre un systeme embarqué type foxboard avec linux et un écran tactile.

    La partie qui me pose probleme est la configuration de la liaison rs232C entre le systeme et l'écran, le code fonctionne mais je ne le comprend pas.

    Le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    #include "stdio.h"
    #include "time.h"
    #include "stdlib.h"
    #include "sys/fcntl.h"
    #include "unistd.h"
    #include "string.h"
    #include "errno.h"     
    #include "termios.h"   
    #include "sys/types.h"
    #include "ilcd.h"
     
    extern int fd_ilcd;              // Parametre de la liaison
    extern struct termios old_attr;  // Structure d'initialisation
     
    /*======================================================================
    **  Nom         : Init_Ilcd
    **  Description : initialise l'écran tactile 
    ** ---------------------------------------------------------------------
    **  Parametres  : 1[S]
    **      1[S]    : code erreur
    **======================================================================*/
    int Init_Ilcd ()
    {
        fd_ilcd = Open_Ilcd( PORT_ILCD );
     
        return  ILCD_OK;
    }
     
    /*======================================================================
    **  Nom         : Open_Ilcd
    **  Description : ouvre la liaison avec l'cran tactile 
    ** ---------------------------------------------------------------------
    **  Parametres  : 1[E] 1[S]
    **      1[E]    : chemin du peripherique 
    **      1[S]    : descripteur de la liaison
    **======================================================================*/
    int Open_Ilcd (char* port_dev)
    {
      struct  termios new_attr;
      int     fd;
     
      fd = open( port_dev, O_RDWR| O_NOCTTY | O_NONBLOCK );
     
      if (fd < 0)
      {
        fprintf( stderr, "Ouverture impossible du port serie : %s\n", strerror(errno) );
        exit( EXIT_FAILURE);
      }
      else
      {
        tcgetattr( fd, &old_attr );
        tcgetattr( fd, &new_attr );
     
        // Modification des paramtres du port serie
        new_attr.c_cflag |= CREAD;      
    // Enable receiver
        new_attr.c_cflag |= B115200;    
    // Set baud rate
        new_attr.c_cflag |= CS8;        
    // 8 data bit
     
        new_attr.c_iflag |= IGNPAR;     
    // Ignore framing errors and parity errors. 
     
        new_attr.c_lflag &= ~(ICANON);  
    // DISABLE canonical mode. 
     
    // Disables the special characters EOF, EOL, EOL2, 
    // ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and buffers by lines.
     
        new_attr.c_lflag &= ~(ECHO);    
    // DISABLE this: Echo input characters.
        new_attr.c_lflag &= ~(ECHOE);   
    // DISABLE this: If ICANON is also set, the ERASE character erases the preceding input 
     
     // character, and WERASE erases the preceding word.
        new_attr.c_lflag &= ~(ISIG);    // DISABLE this: When any of the characters INTR, QUIT, SUSP, 
     
    // or DSUSP are received, generate the corresponding signal.
     
        new_attr.c_cc[VMIN]=1;          
    // Minimum number of characters for non-canonical read.
        new_attr.c_cc[VTIME]=0;        
     // Timeout in deciseconds for non-canonical read.
     
        tcsetattr( fd, TCSANOW, &new_attr );
      }
      return fd;
    }

    Voilà, si quelqu un peut éclairer ma lanterne surtout sur la derniére méthode, sur le rôle et la signification des paramêtres, je l'en remercie d'avance

  2. #2
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Salut désoler je ne poste pas pour t'aider,suis qu'en 1ere année moi^^.Mais je comprends pas tu n'a pas encore rendus ton rapport de projet??J'ai pas mal d'amis en 2eme année,sont tous finis leurs epreuves je crois...
    Vraiment louche l'education nationalle...

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par skylman45
    La partie qui me pose probleme est la configuration de la liaison rs232C entre le systeme et l'écran, le code fonctionne mais je ne le comprend pas.

    Le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #include "stdio.h"
    #include "time.h"
    #include "stdlib.h"
    #include "sys/fcntl.h"
    #include "unistd.h"
    #include "string.h"
    #include "errno.h"     
    #include "termios.h"   
    #include "sys/types.h"
    Horrible. Tous ces headers devaient être des <> et non des ""...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "ilcd.h"
     
    extern int fd_ilcd;              // Parametre de la liaison
    extern struct termios old_attr;  // Structure d'initialisation
    Horrible. Les globales, çaÿ mal. De plus, sans header, çaÿ très mal.

    http://emmanuel-delahaye.developpez....s.htm#globales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    /*======================================================================
    **  Nom         : Init_Ilcd
    **  Description : initialise l'écran tactile 
    ** ---------------------------------------------------------------------
    **  Parametres  : 1[S]
    **      1[S]    : code erreur
    **======================================================================*/
    int Init_Ilcd ()
    {
        fd_ilcd = Open_Ilcd( PORT_ILCD );
     
        return  ILCD_OK;
    }
     
    /*======================================================================
    **  Nom         : Open_Ilcd
    **  Description : ouvre la liaison avec l'cran tactile 
    ** ---------------------------------------------------------------------
    **  Parametres  : 1[E] 1[S]
    **      1[E]    : chemin du peripherique 
    **      1[S]    : descripteur de la liaison
    **======================================================================*/
    int Open_Ilcd (char* port_dev)
    {
      struct  termios new_attr;
      int     fd;
     
      fd = open( port_dev, O_RDWR| O_NOCTTY | O_NONBLOCK );
     
      if (fd < 0)
      {
        fprintf( stderr, "Ouverture impossible du port serie : %s\n", strerror(errno) );
        exit( EXIT_FAILURE);
      }
      else
      {
        tcgetattr( fd, &old_attr );
        tcgetattr( fd, &new_attr );
     
        // Modification des paramtres du port serie
        new_attr.c_cflag |= CREAD;      
    // Enable receiver
        new_attr.c_cflag |= B115200;    
    // Set baud rate
        new_attr.c_cflag |= CS8;        
    // 8 data bit
     
        new_attr.c_iflag |= IGNPAR;     
    // Ignore framing errors and parity errors. 
     
        new_attr.c_lflag &= ~(ICANON);  
    // DISABLE canonical mode. 
     
    // Disables the special characters EOF, EOL, EOL2, 
    // ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and buffers by lines.
     
        new_attr.c_lflag &= ~(ECHO);    
    // DISABLE this: Echo input characters.
        new_attr.c_lflag &= ~(ECHOE);   
    // DISABLE this: If ICANON is also set, the ERASE character erases the preceding input 
     
     // character, and WERASE erases the preceding word.
        new_attr.c_lflag &= ~(ISIG);    // DISABLE this: When any of the characters INTR, QUIT, SUSP, 
     
    // or DSUSP are received, generate the corresponding signal.
     
        new_attr.c_cc[VMIN]=1;          
    // Minimum number of characters for non-canonical read.
        new_attr.c_cc[VTIME]=0;        
     // Timeout in deciseconds for non-canonical read.
     
        tcsetattr( fd, TCSANOW, &new_attr );
      }
      return fd;
    }
    Voilà, si quelqu un peut éclairer ma lanterne surtout sur la derniére méthode, sur le rôle et la signification des paramêtres, je l'en remercie d'avance
    Bah le paramètre d'entrée est le nom du device ("/dev/...."). Ca dépend du système et de sa configuration...

    La valeur retournée est le numéro du descripteur (si >0) ou une erreur (< 0).

Discussions similaires

  1. Recupérer des données sous linux du port RS232
    Par black_hole dans le forum Embarqué
    Réponses: 4
    Dernier message: 21/03/2013, 15h22
  2. [Free Pascal] Liaison RS232 sous Windows XP
    Par tgvtrains dans le forum Free Pascal
    Réponses: 2
    Dernier message: 31/08/2012, 16h14
  3. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  4. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo