Forum Programmation.c Probleme de lecture sur RS232

Posté par  .
Étiquettes : aucune
0
7
avr.
2006
Bonjour
Je dois programmer une liaison RS232 entre un pc et un µControleur 912h60A.
Mais lorsque je lis le port avec le pc, tout se bloque.
Voici mon code

int ReceiveSerie(void)
{
char recept ;
int res = -1;
printf("\n Reception ...... %d\n");
read(fd0, &recept,sizeof(char));
res = atoi(&recept);
printf("\n--->recu : %d",res);
return res;
}


Mon programme se bloque apres cette ligne " Reception ...... -XXXXXXX" avec X le chiffre.
Pouvez vous m'aider à me débloquer? Et a me dire à quoi corresponde les chiffres apres le message "Reception....."
merci
  • # erf...

    Posté par  (site web personnel) . Évalué à 2.

    printf("\n Reception ...... %d\n");

    Il manque l'entier suivant à afficher. Il doit t'afficher n'importe quoi qui suit dans la pile.

    Normalement, gcc doit copieusement t'insulter de faire un truc pareil...

    "La première sécurité est la liberté"

    • [^] # Re: erf...

      Posté par  . Évalué à 1.

      Malheureusement gcc ne m'a pas insulter

      Mais bon apres la correction, le probleme reste :(
      • [^] # Re: erf...

        Posté par  (site web personnel) . Évalué à 2.

        On ne sait pas d'ou vient fd0.

        A prioris, il attend de pouvoir lire un truc sur fd0.

        "La première sécurité est la liberté"

        • [^] # Re: erf...

          Posté par  . Évalué à 1.

          fd0 est mon descripteur de fichier qui correspond à mon port;
          En faite j'ai suivie le how to serial programming ,et j'ai pris exemple dessus
  • # Plus d'infos sont nécessaires

    Posté par  . Évalué à 1.

    Pour avoir pratiqué la connexion de périphériques RS232 pendant quelques années, tu vas avoir du mal à obtenir des réponses pertinentes avec les informations que tu fournis.

    A ma connaissance, les problèmes à résoudre sont de 3 ordres :
    1. Valider le câblage:
    La norme RS232 définit 25 signaux mais, suivant les périphériques, le nombre à utiliser est variable. Les plus simples se contentent de 3 fils (ReceiveData, TransmitData, Ground) mais d'autres ont besoin de signaux supplémentaires. En plus, même lorsque seuls les 3 fils suffisent, il faut parfois croiser RD et TD (mais pas toujours, ça rajoute du piquant aux tests ;)
    Tant que tu n'es pas sûr d'avoir le bon cable, ça ne sert à rien d'aller plus loin.

    2. Paramétrage de la ligne série
    Une fois que tu as le bon cable, tu dois régler les paramètres du port série de ton PC pour qu'il correspondent à ceux de ton micro-controleur.
    Les paramètres à définir sont au minimum:
    vitesse : 1200, 2400, .... ,38400 b/s
    bits par caractère : 7 ou 8 bits
    parité : paire, impaire, aucune
    stop bits : 1 ou 2 bits

    A nouveau, si ton réglage n'est pas correct, tu n'arriveras pas à dialoguer avec ton périphérique. Sous Linux, les commandes pour régler ces paramètres sont stty et setserial.

    3. Protocole de dialogue avec ton périphérique
    Certains périphériques émettent en permanence sur la ligne RS232; il suffit donc de lire sur la liaison série comme tu le fais. D'autres restent muets tant que tu ne leur as pas envoyé une commande d'émission.

    J'espère que ton micro-controleur a bonne documentation, sinon tu vas avoir quelques soucis....
  • # Man select()

    Posté par  . Évalué à 1.

    Regarde aussi du côté de select(), ça te permettra de de faire une tentative de lecture sur le port série sans rester bloquer indéfiniment aucun octet n'est dispo dans le buffer...
  • # Groumphhhh!!!!!!!

    Posté par  . Évalué à 1.

    Bon j'ai testé mon programme en modifiant simplement la sortie, au lieu d'aller sur le port RS232 j'ai pris en sorti un terminal. Ca fonctionne

    Je pense que cela valide mon programme; La configuration est bonne
    Je pense que cela vient d'une procédure de validation.
    Malheureusement la doc du µControleur n'est pas terrible. Il parle de d'attente du caractére '*' pour le transfere du protocol.

    Merci pour votre aide

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.