OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3143|回复: 1

F4用W5500做ntp,进入了UDP,一直请求失败

[复制链接]

5

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-2-27
在线时间
12 小时
发表于 2019-5-31 17:10:53 | 显示全部楼层 |阅读模式
1金钱
int main(void)
{
        RTC_TimeTypeDef RTC_TimeStruct;
        RTC_DateTypeDef RTC_DateStruct;
       
//        u8 tbuf[40];
        u8 t=0;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏè¼¶·Ö×é2,òòÎaóÃμ½á˶¨ê±Æ÷1msÖD¶Ï
        uart_init(115200);                    //3õê¼»ˉ′®¿ú1 8-N-1
        delay_init(168);                          //3õê¼»ˉSystick1¤×÷ê±Öó
        My_RTC_Init();                                 //3õê¼»ˉRTC
        RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);                //ÅäÖÃWAKE UPÖD¶Ï,1ÃëÖóÖD¶Ïò»′Π                  
       
        SPI_Configuration();                //SPI3õê¼»ˉ
        reset_w5500();                           /*ó2¸′λW5500*/
        PHY_check();                        /*¼ì2éíøÏßêÇ·ñ½óèë*/  
        set_w5500_mac();                                                                                /*ÅäÖÃMACμØÖ·*/
//  set_w5500_ip();                                                                                        /*ÅäÖÃIPμØÖ·*/       
        socket_buf_init(txsize, rxsize);                /*3õê¼»ˉ8¸öSocketμÄ·¢Ëí½óêÕ»o′æ′óD¡¶¼Îa2K*/
               
//        printf(" W5500ÎaTCP ·tÎñÆ÷£¬½¨á¢Õììy£¬μè′yPC×÷ÎaTCP Client½¨á¢ᬽó \r\n");
//        printf(" W5500¼àìy¶Ë¿úÎa£o %d \r\n",local_port);
//        printf(" ᬽó3é1|oó£¬TCP Client·¢Ëíêy¾Y¸øW5500£¬W5500½«·μ»Ø¶Ôó|êy¾Y \r\n");
       
        printf(" NTP·tÎñÆ÷IPÎa:%d.%d.%d.%d\r\n",ntp_server_ip[0],ntp_server_ip[1],ntp_server_ip[2],ntp_server_ip[3]);
        printf(" NTP·tÎñÆ÷¶Ë¿úÎa:%d \r\n",ntp_port);       
        ntp_client_init();                          /*NTP3õê¼»ˉ*/
       
        while(1)
        {
                do_dhcp();               /*′óDHCP·tÎñÆ÷»ñè¡2¢ÅäÖÃIPμØÖ·*/
                if(dhcp_ok==1)           /*3é1|»ñè¡IPμØÖ·*/
                {
                        do_ntp_client();
                       
                }
}


进入了UDP模式
但是没获取时间


uint8 ntp_try_times=0;                                                                                                                                                                                                         /*ÇëÇó′Îêy*/
void do_ntp_client(void)
{
        if(total_seconds>0)return;                                                                                                                                                                                 /*òÑ»ñè¡ê±¼äÔò2»ÔùÖ′DDNPT3ìDò*/
        else
        {
                uint16 len;
                uint8 * data_buf = bufpub;
                uint32 destip = 0;
                uint16 destport;
                uint16 startindex = 40;                                                                                                                                                                                 /*»Ø¸′°üÖDê±¼äêy¾Yê×μØÖ·*/
          uint16 k=0;
                k= getSn_SR(SOCK_NTP) ;
                printf("k=%x ",k);   /*??socket???*/
                switch(k)
                //switch(getSn_SR(SOCK_NTP))
                {
                        case SOCK_UDP:                                                                                                                                                                                                                /*UDPÄ£꽿aÆô*/
                                if(total_seconds>0) return;                                                                                                                                                        /*òÑ»ñè¡ê±¼äÔò2»ÔùÖ′DDNPT3ìDò*/
                                if(ntp_try_times<100)
                                {  
                                        if(ntptimer>0)                                                                                                                                                                                                 /*1&#195;&#235;&#199;&#235;&#199;óò&#187;′&#206;*/
                                        {
                                                /*·¢&#203;í&#199;&#235;&#199;óμ&#189;NPT·t&#206;&#241;&#198;÷*/
                                                sendto(SOCK_NTP,ntp_message,sizeof(ntp_message),ntp_server_ip, ntp_port);
                                                ntp_try_times++;
                                                if(npt_debuge)
                                                        //printf("ntp_try_times:%d \r\n",ntp_try_times);                                                /*′òó&#161;&#199;&#235;&#199;ó′&#206;êy*/
                                                printf(" . .");
                                                ntptimer=0;                                                                                                                                                                                                         /*&#212;ú&#182;¨ê±&#198;÷2&#214;D&#182;&#207;&#214;D&#188;ó1*/
                                        }
                                }
                                else
                                {
                                        ntp_try_times=0;
                                        if(npt_debuge)
                                        printf("ntp retry failed!\r\n");                                                                                                                        /*NTP&#199;&#235;&#199;óê§°ü*/
                                }
                                if ((len = getSn_RX_RSR(SOCK_NTP)) > 0)                
                                {
                                        if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;       
                                        recvfrom(SOCK_NTP, data_buf, len, (uint8*)&destip, &destport);/*&#189;óê&#213;NTP·t&#206;&#241;&#198;÷&#187;&#216;&#184;′êy&#190;Y*/
                                        get_seconds_from_ntp_server(data_buf,startindex);                                                        /*′óNTP·t&#206;&#241;&#198;÷&#187;&#241;è&#161;ê±&#188;&#228;*/
                                         
                                        printf("\r\n ±±&#190;&#169;ê±&#188;&#228;£o%d-%02d-%02d %02d:%02d:%02d\r\n",  
                                        (nowdate.year[0]<<8)+nowdate.year[1],                                                       
                                        nowdate.month,
                                        nowdate.day,
                                        nowdate.hour,
                                        nowdate.minute,
                                        nowdate.second);
                                        ntp_try_times=0;
                                }

                        break;
                        case SOCK_CLOSED:                                                                                                                                                                                         
                                socket(SOCK_NTP,Sn_MR_UDP,ntp_port,0);
                        break;
                }
        }
}

请求超时

请求超时

调试

调试
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-6-2 22:45:23 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 19:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表