我正在使用Cortex M3,Stellaris®LM3S6965评估板。我想在我的oled屏幕上显示NTP服务器的时间。首先,我想从NTP服务器获得回复。我搜索了服务器使用UDP。它给了我一个时间戳。我正在使用LWIP库。
我正在尝试向服务器发送一个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);
}
答案 0 :(得分:1)
您没有发送任何数据。 UDP是无连接的,而udp_connect()
函数的these random docs(看起来与你正在使用的相似)说:
此功能不会产生任何网络流量,只会设置pcb的远程地址。
您必须为NTP构建有效的请求数据包,然后使用udp_send()
发送它。有关如何执行此操作的详细信息,以及您似乎需要的有关NTP的大量信息,请阅读current IEEE specification。享受。