Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre habitué Avatar de fahdijbeli
    Homme Profil pro jbeli fahdi
    Étudiant
    Inscrit en
    juin 2012
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme jbeli fahdi
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juin 2012
    Messages : 278
    Points : 141
    Points
    141

    Par défaut module Ethernet stm32

    bonjour,
    j'espére quelq'un a travaillé sur microC Pro for arm , bon j'ai acheté la carte EasyMx Pro v7 puis j'ai lancé un exemple d'ethernet pret avec ma carte donnée par mon fournisseur , j'ai établie la connexion entre ma carte et mon ordinateur avec un cable RJ45 , mon exemple indique que la carte représente le serveur et l'ordinateur représente le client j'ai indiqué une adresse ip fixe de mon ordinateur juste connexion point a point le probléme que lorsque je tape l'adresse http://192.168.20.60:8080/ c'est l'adresse ip de ma carte ,j'ai rien recue alors que il ya une connexion entre les deux voici l'exemple :
    Code :
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    /*
     * Project Name:
         Ethernet_Demo (Ethernet Library demo for internal Ethernet module)
     * Copyright:
         (c) Mikroelektronika, 2012.
    
     * description  :
     *      this code shows how to use the Ethernet library :
     *              the board will reply to ARP & ICMP echo requests
     *              the board will reply to UDP requests on any port :
     *                      returns the request in upper char with a header made of remote host IP & port number
     *              the board will reply to HTTP requests on port 80, GET method with pathnames :
     *                      /               will return the HTML main page
     *                      /s              will return board status as text string
     *                      /t0 ... /t7     will toggle RE8 to RE15 bit and return HTML main page
     *                      all other requests return also HTML main page
     *
     * Test configuration:
         MCU:             STM32F107VC
                          http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00220364.pdf
         Dev.Board:       EasyMx v7 for STM32 ® ARM ®
                          http://www.mikroe.com/eng/products/view/852/easymx-pro-v7-for-stm32/
                          ac:ETHERNET
         Oscillator:      HSE-PLL, 72.000MHz
         ext. modules:    no.
         SW:              mikroC PRO for ARM
                          http://www.mikroe.com/eng/products/view/752/mikroc-pro-for-arm/
     * NOTES:
         - Pull-down PORTD/L at SW8, and put SW10.7 in VCC position (board specific)
         - Close pots PA3 at J8.
         - Turn ON PORTE/H LEDs at SW15.8.
    
     */
    
    #include        "__Ethernet_Intern.h"
    
    const code unsigned char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: ";  // HTTP header
    const code unsigned char httpMimeTypeHTML[] = "text/html\n\n";              // HTML MIME type
    const code unsigned char httpMimeTypeScript[] = "text/plain\n\n";           // TEXT MIME type
    unsigned char httpMethod[] = "GET /";
    /*
     * web page, splited into 2 parts :
     * when coming short of ROM, fragmented data is handled more efficiently by linker
     *
     * this HTML page calls the boards to get its status, and builds itself with javascript
     */
    const code   char    *indexPage =                   // Change the IP address of the page to be refreshed
    "<meta http-equiv=\"refresh\" content=\"3;url=http://192.168.20.60\">\
    <HTML><HEAD></HEAD><BODY>\
    <h1>STM32F Mini Web Server</h1>\
    <a href=/>Reload</a>\
    <script src=/s></script>\
    <table><tr><td valign=top><table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
    <tr><th colspan=2>ADC</th></tr>\
    <tr><td>AN3</td><td><script>document.write(AN3)</script></td></tr>\
    </table></td><td><table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
    <tr><th colspan=2>PORTD</th></tr>\
    <script>\
    var str,i;\
    str=\"\";\
    for(i=0;i<8;i++)\
    {str+=\"<tr><td bgcolor=pink>BUTTON #\"+i+\"</td>\";\
    if(PORTD&(1<<i)){str+=\"<td bgcolor=red>ON\";}\
    else {str+=\"<td bgcolor=#cccccc>OFF\";}\
    str+=\"</td></tr>\";}\
    document.write(str) ;\
    </script>\
    " ;
    
    const code   char    *indexPage2 =  "</table></td><td>\
    <table border=1 style=\"font-size:20px ;font-family: terminal ;\">\
    <tr><th colspan=3>PORTE</th></tr>\
    <script>\
    var str,i;\
    str=\"\";\
    for(i=0;i<8;i++)\
    {str+=\"<tr><td bgcolor=yellow>LED #\"+i+\"</td>\";\
    if(PORTE&(1<<i)){str+=\"<td bgcolor=red>ON\";}\
    else {str+=\"<td bgcolor=#cccccc>OFF\";}\
    str+=\"</td><td><a href=/t\"+i+\">Toggle</a></td></tr>\";}\
    document.write(str) ;\
    </script>\
    </table></td></tr></table>\
    This is HTTP request #<script>document.write(REQ)</script></BODY></HTML>\
    " ;
    
    /***********************************
     * RAM variables
     */
    unsigned char   myMacAddr[6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f};   // my MAC address
    unsigned char   myIpAddr[4]  = {192, 168,  20, 60 };                   // my IP address
    unsigned char   gwIpAddr[4]  = {192, 168,  20, 66};                   // gateway (router) IP address
    unsigned char   ipMask[4]    = {255, 255, 255,  0 };                   // network mask (for example : 255.255.255.0)
    unsigned char   dnsIpAddr[4] = {192, 168,  0, 2 };                   // DNS server IP address
    
    unsigned char   getRequest[15];                                        // HTTP request buffer
    unsigned char   dyna[31] ;                                             // buffer for dynamic response
    unsigned long   httpCounter = 0;                                       // counter of HTTP requests
    
    unsigned char   remoteIpAddr[4]  = {192, 168, 0, 1 };                   // my IP address
    
    /*******************************************
     * functions
     */
    
    /*
     * this function is called by the library
     * the user accesses to the HTTP request by successive calls to Ethernet_Intern_getByte()
     * the user puts data in the transmit buffer by successive calls to Ethernet_Intern_putByte()
     * the function must return the length in bytes of the HTTP reply, or 0 if nothing to transmit
     *
     * if you don't need to reply to HTTP requests,
     * just define this function with a return(0) as single statement
     *
     */
    unsigned int    Ethernet_Intern_UserTCP(unsigned char *remoteHost, unsigned int remotePort, unsigned int localPort, unsigned int reqLength, TEthInternPktFlags *flags)
            {
            unsigned int    len;            // my reply length
            char tmp;
            // should we close tcp socket after response is sent?
            // library closes tcp socket by default if canCloseTCP flag is not reset here
            // flags->canCloseTCP = 0; // 0 - do not close socket
                                       // otherwise - close socke
    
            if(localPort != 80)                         // I listen only to web request on port 80
                    {
                    return(0);
                    }
    
    
            // get 10 first bytes only of the request, the rest does not matter here
            for(len = 0; len < 10; len++)
            {
            getRequest[len] = Ethernet_Intern_getByte();
            }
            getRequest[len] = 0;
            len = 0;
    
            if(memcmp(getRequest, httpMethod, 5))       // only GET method is supported here
                    {
                    return(0);
                    }
    
            httpCounter++;                             // one more request done
    
            if(getRequest[5] == 's')                    // if request path name starts with s, store dynamic data in transmit buffer
                    {
                    // the text string replied by this request can be interpreted as javascript statements
                    // by browsers
    
                    len = Ethernet_Intern_putConstString(httpHeader);              // HTTP header
                    len += Ethernet_Intern_putConstString(httpMimeTypeScript);     // with text MIME type
    
                    // add AN3 value to reply
                    WordToStr(ADC1_Get_Sample(3), dyna) ;
                    len += Ethernet_Intern_putConstString("var AN3=") ;
                    len += Ethernet_Intern_putString(dyna) ;
                    len += Ethernet_Intern_putConstString(";") ;
    
                    // add PORTD value (buttons) to reply
                    len += Ethernet_Intern_putConstString("var PORTD=");
                    WordToStr(GPIOD_IDR, dyna);
                    len += Ethernet_Intern_putString(dyna);
                    len += Ethernet_Intern_putConstString(";");
    
                    // add PORTE value (LEDs) to reply
                    len += Ethernet_Intern_putConstString("var PORTE=");
                    WordToStr(GPIOE_ODR>>8, dyna);
                    len += Ethernet_Intern_putString(dyna);
                    len += Ethernet_Intern_putConstString(";");
    
                    // add HTTP requests counter to reply
                    WordToStr(httpCounter, dyna);
                    len += Ethernet_Intern_putConstString("var REQ=");
                    len += Ethernet_Intern_putString(dyna);
                    len += Ethernet_Intern_putConstString(";");
                    }
            else if(getRequest[5] == 't')                           // if request path name starts with t, toggle PORTE (LED) bit number that comes after
                    {
                    unsigned long   bitMask = 0;                   // for bit mask
    
                    if(isdigit(getRequest[6]))                      // if 0 <= bit number <= 9, bits 8 & 9 does not exist but does not matter
                            {
                            bitMask = getRequest[6] - '0';         // convert ASCII to integer
                            bitMask = 1 << (bitMask + 8);                // create bit mask
                            GPIOE_ODR = GPIOE_ODR ^ bitMask;     // toggle PORTE with xor operator
                            }
                    }
    
            if(len == 0)                                            // what do to by default
                    {
                    len =  Ethernet_Intern_putConstString(httpHeader);             // HTTP header
                    len += Ethernet_Intern_putConstString(httpMimeTypeHTML);       // with HTML MIME type
                    len += Ethernet_Intern_putConstString(indexPage);              // HTML page first part
                    len += Ethernet_Intern_putConstString(indexPage2);             // HTML page second part
                    }
    
            return(len);                                           // return to the library with the number of bytes to transmit
            }
    
    unsigned int    Ethernet_Intern_UserUDP(unsigned char *remoteHost, unsigned int remotePort, unsigned int destPort, unsigned int reqLength, TEthInternPktFlags *flags) {
            unsigned int    len;                           // my reply length
            char tmp;
    
            if(destPort != 10001)
              return 0;
            // reply is made of the remote host IP address in human readable format
            ByteToStr(remoteHost[0], dyna);                // first IP address byte
            dyna[3] = '.';
            ByteToStr(remoteHost[1], dyna + 4);            // second
            dyna[7] = '.';
            ByteToStr(remoteHost[2], dyna + 8);            // third
            dyna[11] = '.';
            ByteToStr(remoteHost[3], dyna + 12);           // fourth
    
            dyna[15] = ':';                                // add separator
    
            // then remote host port number
            WordToStr(remotePort, dyna + 16);
            dyna[21] = '[';
            WordToStr(destPort, dyna + 22);
            dyna[27] = ']';
            dyna[28] = 0;
    
            // the total length of the request is the length of the dynamic string plus the text of the request
            len = 28 + reqLength;
    
            // puts the dynamic string into the transmit buffer
            Ethernet_Intern_putBytes(dyna, 28);
    
            // then puts the request string converted into upper char into the transmit buffer
            while(reqLength--)
                    {
                    tmp = Ethernet_Intern_getByte();
                    Ethernet_Intern_putByte(toupper(tmp));
                    }
    
            return(len);           // back to the library with the length of the UDP reply
            }
    
    void main() {
    
      GPIO_Digital_Input(&GPIOD_BASE, _GPIO_PINMASK_ALL);
      GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_ALL);
    
      ADC1_Init();
      ADC_Set_Input_Channel(_ADC_CHANNEL_3);
      
      Ethernet_Intern_Init(myMacAddr, myIpAddr, _ETHERNET_AUTO_NEGOTIATION, &_GPIO_MODULE_ETHERNET);
      Ethernet_Intern_confNetwork(ipMask, gwIpAddr, dnsIpAddr);
    
      while(1) {
        /*
         * if necessary, test the return value to get error code
         */
        Ethernet_Intern_doPacket();   // process incoming Ethernet packets
    
        /*
         * add your stuff here if needed
         * Ethernet_Intern_doPacket() must be called as often as possible
         * otherwise packets could be lost
         */
      }
    
    }
    je vous en prie je suis coincé a ce niveau, merci d'avance.

  2. #2
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2009
    Messages : 2 532
    Points : 7 022
    Points
    7 022

    Par défaut

    Code :
    lorsque je tape l'adresse http://192.168.20.60:8080/ c'est l'adresse ip de ma carte
    Pour que cela fonctionne, il faut que ta carte possède un serveur web pour renvoyer des données, non ? Si ce que je dis est correct, tu peux pinguer ta carte mais pas en obtenir un flux de données http. Essaye d'accéder à ton PC de cette manière et regarde ce que ça fait.
    Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

    Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

    Pour vos problèmes d'embarqué, utilisez le forum dédié !

  3. #3
    Membre habitué Avatar de fahdijbeli
    Homme Profil pro jbeli fahdi
    Étudiant
    Inscrit en
    juin 2012
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme jbeli fahdi
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juin 2012
    Messages : 278
    Points : 141
    Points
    141

    Par défaut

    j'ai pingué sur ma carte il envoi 4 paquet mais rien recu 4 paquet perdu.
    Pour que cela fonctionne, il faut que ta carte possède un serveur web pour renvoyer des données, non ?
    j'ai pas une idée pour ca mais je crois non est ce que il ya des serveur web pour les carte comme TomCat ?

  4. #4
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2009
    Messages : 2 532
    Points : 7 022
    Points
    7 022

    Par défaut

    Si j'avais un tant soit peu lu le code, j'aurais vu que le code renvoie les données http Il faut par contre t'assurer que la commande envoyer par ton navigateur est supportée par le code (je n'y connais presque rien en HTML mais je pense que ça envoie un GET donc ça devrait le faire).

    Tu pingues ça ne répond pas.... Es-tu sûr de l'adresse IP ? Il faut déjà faire marcher ça avant d'essayer autre chose.
    Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

    Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

    Pour vos problèmes d'embarqué, utilisez le forum dédié !

  5. #5
    Membre habitué Avatar de fahdijbeli
    Homme Profil pro jbeli fahdi
    Étudiant
    Inscrit en
    juin 2012
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme jbeli fahdi
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juin 2012
    Messages : 278
    Points : 141
    Points
    141

    Par défaut

    lorsque tu tape l'url sur le navigateur la méthode par défaut GET le navigateur est responsable pour ca il prend mon url et il ajoute la méthode .
    regarder mon exemple dans la description il indique comment je dois taper l'url.

  6. #6
    Membre habitué Avatar de fahdijbeli
    Homme Profil pro jbeli fahdi
    Étudiant
    Inscrit en
    juin 2012
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme jbeli fahdi
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : juin 2012
    Messages : 278
    Points : 141
    Points
    141

    Par défaut

    bonjour,
    malheureusement c'est bizzard j'ai pas utilisé un cable croisé c'est ca le probléme donc pour faire une laison direct entre deux host (carte - pc) il faut utilisé un cable croisé .

  7. #7
    Modérateur
    Avatar de Bktero
    Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2009
    Messages : 2 532
    Points : 7 022
    Points
    7 022

    Par défaut

    Pas de chance

    Bonne continuation.
    Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

    Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

    Pour vos problèmes d'embarqué, utilisez le forum dédié !

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •