CH32V208W DHCP換到MQTT例程就不行

CH32V208W DHCP換到MQTT例程就不行

代碼如下,就運(yùn)行到 PHY Link Success ,然后就停住了;

運(yùn)行DEMO中的DHCP是可以正常從路由獲取到IP,但是將代碼拷貝到MQTT例程,就不行了,IP獲取不到

也注釋到了MQTT的連接,也是不行,

默認(rèn)IP也改為DHCP的DEMO中的{0,0,0,0}

有熟悉的幫忙看看,是不是哪不對(duì)

?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();

? ? ? ? }


這個(gè)WCHNET_DHCPCallBack函數(shù)似乎沒有運(yùn)行,

里面的打印函數(shù)一個(gè)都沒有打印,

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;

? ? }

}



運(yùn)行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數(shù)量改為1,如下圖,有問題可以通過郵箱聯(lián)系:kx@wch.cn

image.png


確實(shí)是這里,謝謝了啊,第一次用這款芯片,很多不懂的地方


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频