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

Bibliothèques, systèmes et outils C Discussion :

Communication port COM


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Communication port COM
    Bonsoir tout le monde!

    Je souhaite pouvoir communiquer avec un micro-contrôleur sur le port COM virtuel de mon PC. Pour cela, j'ai un convertisseur USB/Série que je branche sur l'USB de mon PC et sur l'USART de mon µ. Le problème est que je ne parvient pas à faire communiquer mon programme côté PC sur le port COM. Pourtant le convertisseur est branché et détecté par mon PC sur le port COM virtuel. Il fonctionne très bien avec un programme tel que Hercule (qui permet de communiquer sur un port COM) et le µ est allumé.
    Du côté de la prog, je me suis penché sur l'API fournit par Windows avec les CreateFile, etc... Et c'est là que débutent les problèmes et plus particulièrement avec la fonction createFile!
    En effet, le port COM semble bien être détecté par mon programme mais je reçois à chaque fois l'erreur 5. Si je choisis un port COM avec rien de branché dessus, je reçois l'erreur 2 (j'en déduis que mon convertisseur est bien détecté).
    Lorsque je parcours la doc sur le MSDN, je ne parviens pas à voir à quoi correspondent ces différents codes d'erreurs, mais d'après mes recherches sur internet, il semblerait que l'erreur 5 soit une insuffisance de privilèges! Quelqu'un pour confirmer et si oui, me dire comment y remédier?

    Pour information, voici le bout de code que j'utilise pour ce début de connection:
    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
        printf("Comport: ");
        scanf("%d", &g_comport);
        sprintf(port, "\\\\.\\COM%d", g_comport);
        unsigned char frame_ack[] = {'T', 0,0,0, 'R', 0,0,0, 'L', 0,0,0, 'A', 0,0,0,0,0, 'S'};
     
        while(State != ComPort_End)
        {
            switch(State)
            {
            case ComPort_Open:
                g_hComm = CreateFile(port, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                if(g_hComm == INVALID_HANDLE_VALUE)
                {
                    printf("impossible de se co...%d\n", GetLastError());
                    return -1;
                }
                break;
    ...
    Je tombe systématiquement dans la condition à la ligne 12...

    Donc si quelqu'un à une petite idée, je lui en serais reconnaissant!

    Cordialement!

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Trouvé!

    Enfaite la connection se fait mais je ne vérifiais pas si elle réussissait et donc dans une boucle je revenais sur le CreateFile et là je tombais en erreur vu qu'il ne peux y avoir 2 insance!
    Pour ceux que ça intéresserait voici le code (très dégueulace!)

    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
    int State = ComPort_Open;
        LPCWSTR port[20];
        printf("Comport: ");
        scanf("%d", &g_comport);
        sprintf(port, "\\\\.\\COM%d", g_comport);
     
        unsigned char test[100] = {0};
        DWORD dwCommEvent;
        DWORD dwRead;
        char chRead;
        DCB config;
        int i = 0;
     
        while(State != ComPort_End)
        {
            switch(State)
            {
            case ComPort_Open:
     
                g_hComm = CreateFile(port, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                if(g_hComm == INVALID_HANDLE_VALUE)
                {
                    printf("impossible de se co...%d\n", GetLastError());
                    CloseHandle(g_hComm);
                    return -1;
                }
                else
                {
                    printf("great! :)");
                    State = ComPort_Config;
                }
                break;
     
            case ComPort_Config:
                if(GetCommState(g_hComm, &config) == 0)
                {
                    printf("Erreur lors de la config!");
                    return -1;
                }
                else
                {
                    config.BaudRate = 115200;
                    config.ByteSize = 8;               // data size, xmit, and rcv
                    config.Parity = NOPARITY;            // no parity bit
                    config.StopBits = ONESTOPBIT;        // one stop bit
     
                    //config fixed parameters
                    config.fBinary=1;
                    config.fParity=0;
                    config.fOutxCtsFlow=0;
                    config.fOutxDsrFlow=0;
                    config.fDtrControl=0;
                    config.fDsrSensitivity=0;
     
                    config.fTXContinueOnXoff=0;
                    config.fRtsControl=0;
     
                    printf("Config Ok!\n");
                    State = ComPort_Poll;
                }
                break;
     
            case ComPort_Poll:
                if(!SetCommMask(g_hComm, EV_RXCHAR))
                {
                    printf("F**k!");
                }
                while(receptNOk && g_run)
                {
                    printf("receiving real values...\n");
                    if(WaitCommEvent(g_hComm, &dwCommEvent, NULL))
                    {
                        if(ReadFile(g_hComm, &chRead, 100, test, NULL))
                        {
                            for (i = 0; i<100; i++)
                            {
                                printf("%c", test[i]);
                            }
                            printf("\n");
                        }
                        else
                        {
                            printf("echec!");
                        }
                    }
                    else
                    {
                        printf("Gros echec!");
                    }
    ...
    En espérant que ça pourra aider du monde!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication port COM via PySerial
    Par declerckcyril dans le forum Général Python
    Réponses: 2
    Dernier message: 28/02/2013, 14h45
  2. Communication Port Com et VB6
    Par eldiablo13 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/07/2010, 18h52
  3. Réponses: 1
    Dernier message: 01/07/2008, 12h33
  4. Communication port com.
    Par Alga007 dans le forum C++
    Réponses: 2
    Dernier message: 08/06/2007, 08h58
  5. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35

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