CH32V208W DHCP换到MQTT例程就不行

CH32V208W DHCP换到MQTT例程就不行

代码如下,就运行到 PHY Link Success ,然后就停住了;

运行DEMO中的DHCP是可以正常从路由获取到IP,但是将代码拷贝到MQTT例程,就不行了,IP获取不到

也注释到了MQTT的连接,也是不行,

默认IP也改为DHCP的DEMO中的{0,0,0,0}

有熟悉的帮忙看看,是不是哪不对

 TIM2_Init();

    WCHNET_GetMacAddr(MACAddr);                                              //get the chip MAC address

    printf("mac addr:");

    for(i = 0; i < 6; i++) 

        printf("%x ",MACAddr[i]);

    printf("\n");

    WCHNET_DHCPSetHostname("WCHNET");                                     //Configure DHCP host name

    i = ETH_LibInit(IPAddr,GWIPAddr,IPMask,MACAddr);                         //Ethernet library initialize

    mStopIfError(i);

    if(i == WCHNET_ERR_SUCCESS) printf("WCHNET_LibInit Success\r\n");

    WCHNET_DHCPStart(WCHNET_DHCPCallBack);

//    Transport_Open();                                                        //open the TCP connection.

    while(1)

    {

        /*Ethernet library main task function,

         * which needs to be called cyclically*/

        WCHNET_MainTask();

        /*Query the Ethernet global interrupt,

         * if there is an interrupt, call the global interrupt handler*/

        if(WCHNET_QueryGlobalInt())

        {

            WCHNET_HandleGlobalInt();

        }


这个WCHNET_DHCPCallBack函数似乎没有运行,

里面的打印函数一个都没有打印,

MQTT

SystemClk:120000000

net version:15

mac addr:50 54 7b 21 69 c1 

WCHNET_LibInit Success

PHY Link Success

到这里就没有打印信息了;

按道理如果DHCP失败,至少得有一条打印信息来着


u8 WCHNET_DHCPCallBack(u8 status, void *arg)

{

    u8 *p;

    u8 tmp[4] = {0, 0, 0, 0};


    if(!status)

    {

        p = arg;

        printf("DHCP Success\r\n");

        /*If the obtained IP is the same as the last IP, exit this function.*/

        if(!memcmp(IPAddr, p ,sizeof(IPAddr)))

            return READY;

        /*Determine whether it is the first successful IP acquisition*/

        if(memcmp(IPAddr, tmp ,sizeof(IPAddr))){

            /*The obtained IP is different from the last value,

             * then disconnect the last connection.*/

//            WCHNET_SocketClose(SocketId, TCP_CLOSE_NORMAL);

        }

        memcpy(IPAddr, p, 4);

        memcpy(GWIPAddr, &p[4], 4);

        memcpy(IPMask, &p[8], 4);

        printf("IPAddr = %d.%d.%d.%d \r\n", (u16)IPAddr[0], (u16)IPAddr[1],

               (u16)IPAddr[2], (u16)IPAddr[3]);

        printf("GWIPAddr = %d.%d.%d.%d \r\n", (u16)GWIPAddr[0], (u16)GWIPAddr[1],

               (u16)GWIPAddr[2], (u16)GWIPAddr[3]);

        printf("IPAddr = %d.%d.%d.%d \r\n", (u16)IPMask[0], (u16)IPMask[1],

               (u16)IPMask[2], (u16)IPMask[3]);

        printf("DNS1: %d.%d.%d.%d \r\n", p[12], p[13], p[14], p[15]);

        printf("DNS2: %d.%d.%d.%d \r\n", p[16], p[17], p[18], p[19]);

//        WCHNET_CreateTcpSocket();                                                   //Create a TCP connection

        return READY;

    }

    else

    {

        printf("DHCP Fail %02x \r\n", status);

        /*Determine whether it is the first successful IP acquisition*/

        if(memcmp(IPAddr, tmp ,sizeof(IPAddr))){

            /*The obtained IP is different from the last value*/

//            WCHNET_SocketClose(SocketId, TCP_CLOSE_NORMAL);

        }

        return NoREADY;

    }

}



运行DEMO中的DHCP例程就能获取IP,

搞不懂原样拷贝到MQTT例程里面,就卡住了

DHCP Test

SystemClk:120000000

net version:15

mac addr:50 54 7b 21 69 c1 

WCHNET_LibInit Success

PHY Link Success

DHCP Success

IPAddr = 192.168.5.100 

GWIPAddr = 192.168.5.1 

IPAddr = 255.255.255.0 

DNS1: 192.168.5.1 

DNS2: 0.0.0.0 

WCHNET_SocketCreat 0



您好,DHCP是基于UDP的,要在netconfig.h中将UDP NUM数量改为1,如下图,有问题可以通过邮箱联系:kx@wch.cn

image.png


确实是这里,谢谢了啊,第一次用这款芯片,很多不懂的地方


只有登录才能回复,可以选择微信账号登录