Liaison série en C
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Liaison série en C



  1. #1
    invite0155ce91

    Liaison série en C


    ------

    Bonjour,
    Je souhaite établir une liaison série entre un microcontrôleur et le PC. N'ayant plus de port USB sur PC, j'utilise un câble, USB->DB9. Je l'ai branché et ai installé le driver fourni avec. Très bien, le port COM3 est reconnu par le PC. J'ouvre un hyperterminal sur COM3, je relie la broche RX et TX pour tester la bonne fonctionnalité du port, et en effet quand je tape au clavier dans l'hyperterminal, les données me sont renvoyées. Donc jusque là tout va bien, niveau hardware tout est en place.
    Maintenant je m'attaque au programme en C et j'utilise simplement le bout de code suivant sous Visual C++ pour initialiser le port :

    HANDLE g_hCOM = NULL;

    /* construction du nom du port, tentative d'ouverture */
    g_hCOM = CreateFile("COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
    if(g_hCOM == INVALID_HANDLE_VALUE)
    {
    printf("Erreur lors de l'ouverture du port COM\n");
    }

    Seulement la console me renvoie le message d'erreur et donc la fonction n'aboutit pas
    Quelqu'un saurait-il de quoi il s'agit ?
    Merci d'avance.

    -----

  2. #2
    Jack
    Modérateur

    Re : Liaison série en C

    Hyperterminal est-il bien fermé?

    A+

  3. #3
    invite0155ce91

    Re : Liaison série en C

    Oui oui l'hyperterminal est bien fermé :/

  4. #4
    invite0155ce91

    Re : Liaison série en C

    Je précise que lorsque je mets un GetLastError() l'erreur retournée est l'erreur 2 qui signifie ERROR_FILE_NOT_FOUND

  5. A voir en vidéo sur Futura
  6. #5
    invite0155ce91

    Re : Liaison série en C

    OK parfait je viens de trouver !
    Il faut écrire en réalité :

    g_hCOM = CreateFile(TEXT("COM3"), GENERIC_READ|GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL);

    Il ne faut pas oublier de faire le cast TEXT. Apparemment le problème ne se posait pas avant puisque dans tous les exemples que j'ai pu trouver sur le net, ce cast n'était pas nécessaire. Ça doit peut-être venir des dernières versions de windows ou de Visual C++.
    Avis aux prochains qui tomberont sur ce problème ^^

  7. #6
    Jack
    Modérateur

    Re : Liaison série en C

    Ah, j'arrive trop tard puisque tu as trouvé. Tant mieux finalement.

    Je voulais dire que ça pouvait effectivement venir du nom du port.
    Ça doit peut-être venir des dernières versions de windows ou de Visual C++.
    Ca vient en fait du type de caractère utilisé. Pour Visual studio, dans mes programmes je mets:
    Code:
        char buf[10] = "COM1";
    // ...
        //--- Ouverture du port série en lecture / écriture.
        hcom=CreateFileA((LPCSTR)buf, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING , 0, 0);
        if (hcom==0 || hcom==INVALID_HANDLE_VALUE)
            return false;
    Avec C++ builder, c'est:
    Code:
        char buf[] = "COM1";
    //...
    
    
        //--- Ouverture du port série en lecture / écriture.
        hcom=CreateFile(buf, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING , 0, 0);
        if (hcom==0 || hcom==INVALID_HANDLE_VALUE)
            return false;
    Note l'utilisation de CreateFile et de CreateFileA.

    A+
    Dernière modification par Jack ; 08/05/2012 à 16h58.

Discussions similaires

  1. Liaison ethernet via série
    Par invite60427fbe dans le forum Électronique
    Réponses: 6
    Dernier message: 13/09/2009, 19h23
  2. liaison série et hyperterminal
    Par invite42fe2d4f dans le forum Électronique
    Réponses: 1
    Dernier message: 09/09/2009, 00h11
  3. Vitesse liaison série
    Par invite85bfc8b3 dans le forum Électronique
    Réponses: 32
    Dernier message: 10/06/2008, 18h07
  4. Liaison Serie
    Par invite0ff982b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 03/06/2007, 10h53
  5. PYTHON: liaison série
    Par invite52346c65 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 05/12/2006, 13h44