AnsweredAssumed Answered

STM32F407 Ethernet inicialization problem with Uvision4

Question asked by carbonera.felipe on Aug 12, 2015
Latest reply on Aug 14, 2015 by carbonera.felipe

Hi,

I am using STM32F407 with uvision4, RL-TCPnet from keil and I have a problem in the Ethernet inicialization.

When I turn on the PC and turn on the board at the same time the Ethernet doesn’t work, but if I turn on the PC and after that I turn on the board the communication works.

I have two client sockets and one server socket.
I have no hub, just the ethernet cable direct.

Do anyone already have this kind of problem?


The code is:

int main (void){ 
...
//INICIALIZA TCP NET  
    init_TcpNet ();
 
    socket_tcp_cliente = tcp_get_socket (TCP_TYPE_CLIENT, 0, 5, tcp_callback_OSC);
  socket_tcp = tcp_get_socket (TCP_TYPE_CLIENT, 0, 5, tcp_callback_OSC);
 
   /* Initialize TCP Socket and start listening */
    socket_tcp_escrita = tcp_get_socket (TCP_TYPE_SERVER, 0, 30, tcp_callback);
     
    if (socket_tcp_escrita != 0) {
        tcp_listen (socket_tcp_escrita, 2002);
    }
 
  os_sys_init (task_init); /* Inicializa Sistema Operacional   */
}

__task void timer_task (void){
   
  os_itv_set (100);
  
 while (1) {
    timer_tick ();
    tick = __TRUE;   
    os_itv_wait ();
  }
}


*----------------------------------------------------------------------------
 *  Task 2: Ethernet Task Resposta
 *---------------------------------------------------------------------------*/
 
__task void task_Resposta (void){
 
    char estado_tcp = 0;
    unsigned int indice = 0;
  //  os_itv_set(100);
    for(;;){
        estado_tcp = tcp_get_state(socket_tcp_cliente);
        switch (estado_tcp) {
             
            case TCP_STATE_FREE:             
                break;
                                                     
            case TCP_STATE_CLOSED:             
                Rem_IP[3] = 62;
                    if (tcp_connect (socket_tcp_cliente, Rem_IP, 5001, 0)){
                        delay_oscilografia = 100;
                    }else{
                        delay_oscilografia = 1000;
                    }
                 break;
 
            case TCP_STATE_CONNECT:
                if (tcp_check_send (socket_tcp_cliente) == __TRUE) {
                     sendbuf_Resposta = tcp_get_buf(1206);
                     sendbuf_Resposta[0] = 'O';
                     sendbuf_Resposta[1] = 'S';
                     sendbuf_Resposta[2] = 'C';
 
                 for (indice = 0; indice < 1200; indice++)
                            sendbuf_Resposta[indice + 3] = Oscilografia_IHM[indice];
                                            
 
                     sendbuf_Resposta[indice + 3] = 'O';
                     sendbuf_Resposta[indice + 4] = 'S';
                     sendbuf_Resposta[indice + 5] = 'C';   
              
                            cont_teste_IHM ++;
                     tcp_send (socket_tcp_cliente, sendbuf_Resposta, 1206);
                 }
                 break;
        }
  //     os_itv_wait();
      os_dly_wait(delay_oscilografia);
     }
}


/*----------------------------------------------------------------------------
 *  Task 5: Ethernet Tcp Task
 *---------------------------------------------------------------------------*/
 
__task void tcp_task(void){
    while (1) {
         
        main_TcpNet();
        os_tsk_pass();
    }
}

U16 tcp_callback_OSC (U8 soc, U8 evt, U8 *ptr, U16 par) {
     
 
            if (soc == socket_tcp) {
              switch (evt) {
                case TCP_EVT_CONREQ:
                  /* Remote host is trying to connect to our TCP socket. */
                  /* 'ptr' points to Remote IP, 'par' holds the remote port. */
             
                  /* Return 1 to accept connection, or 0 to reject connection */
                  return (1);
                case TCP_EVT_ABORT:                               
                  /* Connection was aborted */
                  break;
                case TCP_EVT_CONNECT:
                  /* Socket is connected to remote peer. */
                  break;
                case TCP_EVT_CLOSE:
                  /* Connection has been closed */
                   
                  break;
                case TCP_EVT_ACK:
                  /* Our sent data has been acknowledged by remote peer */
             
                  break;
                case TCP_EVT_DATA:
                  /* TCP data frame has been received, 'ptr' points to data */
                  /* Data length is 'par' bytes */
         
                                         
                  break;
              }
          }
    return (0);
}


Thanks.

Outcomes