2013-01-04 45 views
0

我正在使用Cortex M3,Stellaris®LM3S6965評估板。我想在我的oled屏幕上顯示NTP服務器的時間。首先,我想從NTP服務器獲得答覆。我搜索到服務器與UDP協同工作。它給了我一個時間戳。我正在使用LWIP庫。發送UDP包到NTP服務器並接收時間(lwip,Cortex M3,Stellaris LM3S6965評估板)

我試圖發送服務器的UDP數據包,我想顯示顯示(時間戳)對收到的分組數據..

所以我覺得我必須送一個UDP包到TNP服務器並接收時間戳。

但不知何故,它不工作。我希望你們能幫我找到解決辦法。

編輯:

我也發現有關NTP here

一些更多的信息更新程序:

// Function gets called when we recieve data 
err_t RecvUTPCallBack(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port){ 
    RIT128x96x4Enable(1000000); 
    RIT128x96x4StringDraw("ENTERING CALLBACK", 40, 40, 11); 


    volatile int totaal_lengte=0; 
    totaal_lengte = p->tot_len; 
    volatile int line=40; 

    while(1){ 

     RIT128x96x4Enable(1000000); 
     RIT128x96x4StringDraw(p->payload+1, 0, line, 15); 
     line+=8; 
     if(p->len != p->tot_len){ 
      p=p->next; 
     } 
     else break; 
    } 
    pbuf_free(p); 
} 

int main(void){ 
       //UDP 
       struct udp_pcb * udp_con_new; 
       struct ip_addr ntp_server; 
       udp_con_new = udp_new(); 
       IP4_ADDR(&ntp_server,65,55,21,13); // time.windows.com 
       udp_connect(udp_con_new,&ntp_server,123); 

       struct pbuf * p; 
       p = 0; 

       udp_send(udp_con_new, p); 

       //udp_recv(upcb,RecvUTPCallBack, recv_arg); 

} 

回答

1

你不發送任何數據。 UDP是爲udp_connect()功能(這似乎匹配您正在使用的)無連接的,並these random docs說:

此功能不會產生任何網絡流量,但是隻設置在PCB的遠程地址。

您必須爲NTP構造一個有效的請求數據包,然後使用udp_send()發送它。有關如何執行此操作的詳細信息以及您需要的大量NTP信息,請閱讀current IEEE specification。請享用。

+0

然後我需要發送什麼數據到NTP服務器? – Sharpless512

+0

@Sharpless512請參閱NTP規範,它會告訴您NTP數據包的格式。 – unwind

+0

有很多信息,但沒有真正解釋我需要發送的內容。 – Sharpless512

相關問題