国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

第二章 W55MH32 DHCP示例

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 09:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2iBhEGADwC9AACHawDEnho263.png

第二章 W55MH32 DHCP示例

本篇文章我們將詳細講解DHCP協議的基本信息、優勢特點、工作原理、應用場景,并通過實戰例程,為大家講解如何使用W55MH32動態獲取IP信息,幫助讀者更好地了解并運用這一協議。

有關W55MH32的初始化過程,請參考相關章節,這里將不再詳述。

1 DHCP協議簡介

DHCP(Dynamic Host Configuration Protocol)即動態主機配置協議,是一個應用層協議。它主要用于在 IP網絡中為客戶端自動分配 IP地址及其他相關網絡配置參數,如子網掩碼、默認網關、DNS服務器地址等。這種動態分配的方式大大簡化了網絡管理員的工作,并且能夠更有效地利用有限的 IP地址資源。

2 DHCP協議特點

便捷配置與管控:DHCP可自動分配IP地址、子網掩碼、網關、DNS等網絡參數,設備入網即自動獲取,用戶無需手動操作。管理員能通過服務器集中管理IP分配,網絡架構調整時,修改服務器設置,客戶端自動適配;靜態IP則要逐臺手動輸入、調整,流程繁瑣還易出錯。

靈活資源利用:DHCP動態分配IP,設備離線后地址回池再利用,契合公共場所臨時大量接入需求,提升地址利用率;還能按需靈活調配,為關鍵設備保留靜態IP,其余動態分配。靜態IP固定占用,閑置浪費資源,靈活性差。

高效維護與排障:DHCP自動分配,規避手動配置錯誤與IP地址沖突,服務器詳細記錄分配情況。網絡故障時,管理員依服務器日志鎖定故障設備排查;靜態IP手動配置易沖突,故障排查缺少有效記錄,難度大、耗時久。

適配移動與拓展:移動設備橫跨網絡時,DHCP讓其自動獲取IP配置,無需手動切換;網絡規模擴大、新增設備時,DHCP自動分配地址,助力快速擴容。靜態IP需提前規劃,易現地址不足、分配不合理問題,還增加設備移動操作難度。

3 DHCP工作原理

DHCP工作原理如圖所示:

wKgZO2iBhEGAWhltAAAf55K7z1I506.png

從圖示中我們可以直觀明了地看出DHCP地工作原理,一般為四個階段:

發現階段:客戶端接入網絡時以廣播形式發送DHCP Discover報文(目的IP是255.255.255.255,源IP是0.0.0.0)尋找DHCP服務器,報文中含客戶端MAC地址。若服務器和客戶端不在同一子網,會通過中繼代理(如路由器)轉發。

提供階段:DHCP服務器收到Discover報文后,從IP地址池選一個未分配的IP地址,將其和子網掩碼、默認網關、DNS服務器地址等信息封裝進DHCP Offer報文,以廣播或單播方式發給客戶端,可能會有多個Offer報文。

請求階段:客戶端收到多個Offer后選擇一個,以廣播形式發送DHCP Request報文請求分配該IP地址等配置信息,且發送ARP請求檢查IP地址唯一性。

確認階段:服務器收到Request報文后,檢查IP地址是否可用。若可用,將以廣播或單播的形式發送DHCP Ack報文,客戶端收到后完成網絡配置正常上網。若不可用,發送DHCP Nak報文,客戶端收到后重新發起Discover流程。

4 DHCP協議報文

DHCP的報文格式如下:

0~7 bit 8~15 bit 16~23 bit 24~31 bit
op(1) htype(1) hlen(1) hops(1)
Xid(4)
secs(2) flags(2)
ciaddr(4)
yiaddr(4)
siaddr(4)
giaddr(4)
chaddr(16)
sname(64)
file(128)
options(variable)

DHCP報文各字段的說明如下表所示:

字段 長度 含義
op(op code) 1字節 表示報文的類型,取值為1或2,含義如下:
1:客戶端請求報文。
2:服務器響應報文。
htype(hardware type) 1字節 表示硬件類型。不同的硬件類型取值不同,常見值為1,表示以太網(10Mb)。
hlen(hardware length) 1字節 表示硬件地址長度,以太網的值為6。
hops 1字節 表示DHCP報文經過的DHCP中繼數目。客戶端或服務器初始設為0,每經過一個中繼則加1,用于限制DHCP報文經過的中繼數量,且服務器與客戶端間中繼數目不能超16個(Hops值不能大于16),否則報文將被丟棄。
xid 4字節 表示DHCP客戶端選取的隨機數,使DHCP服務器的回復與DHCP客戶端的報文相關聯。
secs(seconds) 2字節 表示客戶端從開始獲取地址或地址續租更新后所用的時間,單位是秒。
flags 2字節 表示標志字段。只有標志字段的最高位才有意義,其余的15位均被置為0。最高位被解釋為單播或者廣播響應標志位,內容如下所示:
0:客戶端請求服務器以單播形式發送響應報文。
1:客戶端請求服務器以廣播形式發送響應報文。
ciaddr(client ip address) 4字節 表示客戶端的IP地址??梢允欠掌鞣峙浣o客戶端的IP地址或者客戶端已有的IP地址。客戶端在初始化狀態時沒有IP地址,此字段為0.0.0.0。
IP地址0.0.0.0僅在采用DHCP方式的系統啟動時允許本主機利用它進行臨時的通信,不是有效目的地址。
yiaddr(your client ip address) 4字節 表示服務器分配給客戶端的IP地址。當服務器進行DHCP響應時,將分配給客戶端的IP地址填入此字段。
siaddr(server ip address) 4字節 DHCP客戶端獲得啟動配置信息的服務器的IP地址。
giaddr(gateway ip address) 4字節 表示首個DHCP中繼的IP地址??蛻舳税lDHCP請求,若服務器與客戶端不在同一網段,首個中繼轉發請求報文給服務器時填入自身IP地址,服務器據此判斷客戶端網段地址,選地址池分配對應IP地址,再按此地址回發響應報文給該中繼,由中繼轉發給客戶端。若存在多個中繼,此字段作為客戶端網段標記,填好首個中繼IP地址后不再變更,每經過一個中繼,hops字段數值加1。
chaddr(client hardware address) 16字節 表示客戶端的MAC地址,此字段與前面的“hardware type”和“hardware length”保持一致。當客戶端發出DHCP請求時,將自己的硬件地址填入此字段。對于以太網,當“hardware type”和“hardware length”分別為“1”和“6”時,此字段必須填入6字節的以太網MAC地址。
sname(server host name) 64字節 表示客戶端獲取配置信息的服務器名字。此字段由DHCP服務器填寫,是可選的。如果填寫,必須是一個以0結尾的字符串。
file(file name) 128字節 表示客戶端需獲取的啟動配置文件名。由DHCP服務器填寫,隨DHCP地址分配下發至客戶端。該字段可選,若填寫則須是以0結尾的字符串。
options 可變 表示DHCP的選項字段,最多1200字節,包含DHCP報文類型、服務器分配給終端的配置信息(如網關IP地址、DNS服務器IP地址、客戶端IP地址有效租期等)。詳情參見IETF官網“DHCP Options”部分的描述。

Discover報文實例:客戶端通過UDP廣播的方式發送DHCP發現報文,報文中包含了客戶端MAC地址、主機名和請求的IP地址等信息

|報文解析|
Message type: Boot Request (1)(op code為1,客戶端請求報文)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xbf600589
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HP_b1:37:11 (64:4e:d7:b1:37:11)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Discover)
Option: (61) Client identifier
Option: (50) Requested IP Address (192.168.1.115)
Option: (12) Host Name
Option: (60) Vendor class identifier
Option: (55) Parameter Request List
Option: (255) End
Padding: 0000000000000000

|報文原文|
01 01 06 00 bf 60
05 89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4e d7 b1 37 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 01 3d 07 01 64 4e d7 b1 37 11 32 04 c0 a8 01 73 0c 05 46 41 45 5f 33 3c 08 4d 53 46 54 20 35 2e 30 37 0e 01 03 06 0f 1f 21 2b 2c 2e 2f 77 79 f9 fc ff 00 00 00 00 00 00 00 00

Offer報文實例:DHCP服務器收到Discover報文后,從IP地址池選一個未分配的IP地址,將其和子網掩碼、默認網關等信息封裝進Offer報文以廣播或單播(這里為廣播的方式)方式發給客戶端

|報文解析|
Message type: Boot Reply (2)(op code為2,服務器響應報文)
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0xbf600589
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.1.115
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: HP_b1:37:11 (64:4e:d7:b1:37:11)
Client hardware address padding: 00000000000000000000
Server host name not given
 Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Option: (54) DHCP Server Identifier (192.168.1.1)
 Option: (51) IP Address Lease Time
 Option: (6) Domain Name Server
Option: (1) Subnet Mask (255.255.255.0)
Option: (3) Router
Option: (255) End
|報文原文|
02 01 06 00 bf 60
05 89 00 00 00 00 00 00 00 00 c0 a8 01 73 00 00 00 00 00 00 00 00 64 4e d7 b1 37 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 02 36 04 c0 a8 01 01 33 04 00 00 1c 20 06 08 ca 60 86 21 ca 60 80 56 01 04 ff ff ff 00 03 04 c0 a8 01 01 ff

其他報文信息這里就不一一展示了,感興趣的朋友可以自行抓取查看。

5 DHCP應用場景

DHCP的應用場景通常集中在需要動態分配IP地址的局域網環境中。例如,在大型的辦公環境或者學校中,由于有大量的網絡設備需要連接到網絡,手動為每個設備分配和管理IP地址會非常繁瑣且容易出錯。使用DHCP可以集中管理IP地址的分配,提高網絡管理員的工作效率,減少錯誤的發生,且可以適應網絡變化。

6實現過程

接下來,我們一起來看看如何在W55MH32上實現DHCP動態獲取網絡地址信息。

注意:使用DHCP動態獲取IP時,必需將網絡結構體配置中dhcp的值改為NETINFO_DHCP,這樣才能運行DHCP模式。

步驟一:注冊DHCP定時器中斷到1s定時器中:

/**
* @brief   1ms timer IRQ Handler
* @param   none
* @return  none
*/
void TIM3_IRQHandler(void)
{
   static uint32_t tim3_1ms_count = 0;
   if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
   {
       tim3_1ms_count++;
       if (tim3_1ms_count >= 1000)
       {
           DHCP_time_handler();
           tim3_1ms_count = 0;
       }
       TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
   }
}

注冊DHCP定時器中斷主要為了DHCP超時處理。

在dhcp.h文件中,定義了DHCP超時時間、重試次數、端口號和主機名等內容:

/* Retry to processing DHCP */
#define MAX_DHCP_RETRY          2        ///< Maximum retry count
#define DHCP_WAIT_TIME          10       ///< Wait Time 10s

/* UDP port numbers for DHCP */
#define DHCP_SERVER_PORT       67       ///< DHCP server port number
#define DHCP_CLIENT_PORT         68       ///< DHCP client port number

#define MAGIC_COOKIE             0x63825363  ///< You should not modify it number.
#define DCHP_HOST_NAME           "WIZnet"

步驟二:啟用DHCP動態獲?。?/strong>

首先需要將默認網絡地址信息結構體中的模式改為DHCP模式

/* network information */
wiz_NetInfo default_net_info = {
   .mac  = {0x00, 0x08, 0xdc, 0x12, 0x22, 0x12},
   .ip   = {192, 168, 1, 30},
   .gw   = {192, 168, 1, 1},
   .sn   = {255, 255, 255, 0},
   .dns  = {8, 8, 8, 8},
   .dhcp = NETINFO_DHCP
};

步驟三:DHCP獲取網絡地址信息

首先是在初始化完硬件和TOE之后調用network_init進行網絡地址信息配置

network_init(ethernet_buf, &default_net_info);

這個函數需要將DHCP處理用到的緩存數組以及默認網絡地址信息傳入,函數具體內容如下:

/**
* @brief   set network information
*
* First determine whether to use DHCP. If DHCP is used, first obtain the Internet Protocol Address through DHCP.
* When DHCP fails, use static IP to configure network information. If static IP is used, configure network information directly
*
* @param   sn: socketid
* @param   ethernet_buff:
* @param   net_info: network information struct
* @return  none
*/
void network_init(uint8_t *ethernet_buff, wiz_NetInfo *conf_info)
{
   int ret;
   wizchip_setnetinfo(conf_info); // Configuring Network Information
   if (conf_info->dhcp == NETINFO_DHCP)
   {
       ret = wiz_dhcp_process(0, ethernet_buff);
       if (ret == 0)
       {
           conf_info->dhcp = NETINFO_STATIC;
           wizchip_setnetinfo(conf_info);
       }
   }
   print_network_information();
}

在這個函數中,會先設置一遍網絡地址到W55MH32中,然后判斷模式是否為DHCP模式,如果為DHCP模式,則使用wiz_dhcp_process函數來執行DHCP進程,在通過DHCP方式成功獲取到網絡地址后更新到W55MH32中,最后將網絡地址信息打印出來。wiz_dhcp_process函數內容如下:

/**
* @brief DHCP process
* @param sn :socket number
* @param buffer :socket buffer
*/
static uint8_t wiz_dhcp_process(uint8_t sn, uint8_t *buffer)
{
   wiz_NetInfo conf_info;
   uint8_t     dhcp_run_flag = 1;
   uint8_t     dhcp_ok_flag  = 0;
   /* Registration DHCP_time_handler to 1 second timer */
   DHCP_init(sn, buffer);
   printf("DHCP runningrn");
   while (1)
   {
       switch (DHCP_run())  // Do the DHCP client
       {
       case DHCP_IP_LEASED: // DHCP Acquiring network information successfully
           if (dhcp_ok_flag == 0)
           {
               dhcp_ok_flag  = 1;
               dhcp_run_flag = 0;
           }
           break;
       case DHCP_FAILED:
           dhcp_run_flag = 0;
           break;
       }
       if (dhcp_run_flag == 0)
       {
           printf("DHCP %s!rn", dhcp_ok_flag ? "success" : "fail");
           DHCP_stop();
           if (dhcp_ok_flag)
           {
               getIPfromDHCP(conf_info.ip);
               getGWfromDHCP(conf_info.gw);
               getSNfromDHCP(conf_info.sn);
               getDNSfromDHCP(conf_info.dns);
               conf_info.dhcp = NETINFO_DHCP;
               getSHAR(conf_info.mac);
               wizchip_setnetinfo(&conf_info); // Update network information to network information obtained by DHCP
               return 1;
           }
           return 0;
       }
   }
}

在該函數體中,首先會調用DHCP_init函數進行初始化DHCP配置:

void DHCP_init(uint8_t s, uint8_t * buf)
{
   uint8_t zeroip[4] = {0,0,0,0};
   getSHAR(DHCP_CHADDR);
   if((DHCP_CHADDR[0] | DHCP_CHADDR[1]  | DHCP_CHADDR[2] | DHCP_CHADDR[3] | DHCP_CHADDR[4] | DHCP_CHADDR[5]) == 0x00)
   {
     // assigning temporary mac address, you should be set SHAR before call this function. 
     DHCP_CHADDR[0] = 0x00;
     DHCP_CHADDR[1] = 0x08;
     DHCP_CHADDR[2] = 0xdc;      
     DHCP_CHADDR[3] = 0x00;
     DHCP_CHADDR[4] = 0x00;
     DHCP_CHADDR[5] = 0x00; 
     setSHAR(DHCP_CHADDR);     
   }
 DHCP_SOCKET = s; // SOCK_DHCP
 pDHCPMSG = (RIP_MSG*)buf;
 DHCP_XID = 0x12345678;
 {
   DHCP_XID += DHCP_CHADDR[3];
   DHCP_XID += DHCP_CHADDR[4];
   DHCP_XID += DHCP_CHADDR[5];
   DHCP_XID += (DHCP_CHADDR[3] ^ DHCP_CHADDR[4] ^ DHCP_CHADDR[5]);
 }
 // WIZchip Netinfo Clear
 setSIPR(zeroip);
 setGAR(zeroip);
 reset_DHCP_timeout();
 dhcp_state = STATE_DHCP_INIT;
}

然后是在DHCP主循環中運行DHCP_run函數,它的主要作用是進行DHCP組包,發送發現、請求等報文,對服務器的提供、響應等內容進行解析以及超時處理,這里只需要根據DHCP_run函數的返回值進行相應處理即可。DHCP_run函數內容如下:

uint8_t DHCP_run(void)
{
 uint8_t  type;
 uint8_t  ret;
 if(dhcp_state == STATE_DHCP_STOP) return DHCP_STOPPED;
 if(getSn_SR(DHCP_SOCKET) != SOCK_UDP)
     socket(DHCP_SOCKET, Sn_MR_UDP, DHCP_CLIENT_PORT, 0x00);
 ret = DHCP_RUNNING;
 type = parseDHCPMSG();
 switch ( dhcp_state ) {
     case STATE_DHCP_INIT     :
         DHCP_allocated_ip[0] = 0;
         DHCP_allocated_ip[1] = 0;
         DHCP_allocated_ip[2] = 0;
         DHCP_allocated_ip[3] = 0;
       send_DHCP_DISCOVER();
       dhcp_state = STATE_DHCP_DISCOVER;
       break;
   case STATE_DHCP_DISCOVER :
     if (type == DHCP_OFFER){
#ifdef _DHCP_DEBUG_
       printf("> Receive DHCP_OFFERrn");
#endif
           DHCP_allocated_ip[0] = pDHCPMSG->yiaddr[0];
           DHCP_allocated_ip[1] = pDHCPMSG->yiaddr[1];
           DHCP_allocated_ip[2] = pDHCPMSG->yiaddr[2];
           DHCP_allocated_ip[3] = pDHCPMSG->yiaddr[3];
       send_DHCP_REQUEST();
       dhcp_state = STATE_DHCP_REQUEST;
     } else ret = check_DHCP_timeout();
         break;
   case STATE_DHCP_REQUEST :
     if (type == DHCP_ACK) {
#ifdef _DHCP_DEBUG_
       printf("> Receive DHCP_ACKrn");
#endif
       if (check_DHCP_leasedIP()) {
         // Network info assignment from DHCP
         dhcp_ip_assign();
         reset_DHCP_timeout();
         dhcp_state = STATE_DHCP_LEASED;
       } else {
         // IP address conflict occurred
         reset_DHCP_timeout();
         dhcp_ip_conflict();
           dhcp_state = STATE_DHCP_INIT;
       }
     } else if (type == DHCP_NAK) {
#ifdef _DHCP_DEBUG_
       printf("> Receive DHCP_NACKrn");
#endif
       reset_DHCP_timeout();
       dhcp_state = STATE_DHCP_DISCOVER;
     } else ret = check_DHCP_timeout();
   break;
   case STATE_DHCP_LEASED :
       ret = DHCP_IP_LEASED;
     if ((dhcp_lease_time != INFINITE_LEASETIME) && ((dhcp_lease_time/2) < dhcp_tick_1s)) {
       
#ifdef _DHCP_DEBUG_
         printf("?> Maintains the IP address rn");
#endif
       type = 0;
       OLD_allocated_ip[0] = DHCP_allocated_ip[0];
       OLD_allocated_ip[1] = DHCP_allocated_ip[1];
       OLD_allocated_ip[2] = DHCP_allocated_ip[2];
       OLD_allocated_ip[3] = DHCP_allocated_ip[3];
       
       DHCP_XID++;
       send_DHCP_REQUEST();
       reset_DHCP_timeout();
       dhcp_state = STATE_DHCP_REREQUEST;
     }
   break;
   case STATE_DHCP_REREQUEST :
       ret = DHCP_IP_LEASED;
     if (type == DHCP_ACK) {
       dhcp_retry_count = 0;
       if (OLD_allocated_ip[0] != DHCP_allocated_ip[0] || 
           OLD_allocated_ip[1] != DHCP_allocated_ip[1] ||
           OLD_allocated_ip[2] != DHCP_allocated_ip[2] ||
           OLD_allocated_ip[3] != DHCP_allocated_ip[3]) 
       {
         ret = DHCP_IP_CHANGED;
         dhcp_ip_update();
               #ifdef _DHCP_DEBUG_
                 printf(">IP changed.rn");
               #endif
         
       }
         #ifdef _DHCP_DEBUG_
           else printf(">IP is continued.rn");
         #endif                
       reset_DHCP_timeout();
       dhcp_state = STATE_DHCP_LEASED;
     } else if (type == DHCP_NAK) {
#ifdef _DHCP_DEBUG_
       printf("> Receive DHCP_NACK, Failed to maintain iprn");
#endif
       reset_DHCP_timeout();
       dhcp_state = STATE_DHCP_DISCOVER;
     } else ret = check_DHCP_timeout();
       break;
   default :
       break;
 }
 return ret;
}

8運行結果

燒錄例程運行后,首先打印了PHY鏈路檢測的結果以及DHCP日志信息,然后打印了網絡地址信息,這里可以看到配置方式為DHCP,IP地址為192.168.1.117,最后是PING提示消息。

接著在PC端打開CMD,PING W55MH32的IP地址,可以正常PING通。

wKgZPGiBhEGAO_jOAACWGcew2vs443.png

7總結

本文介紹 DHCP協議,包括其在 IP網絡自動分配參數的功能、便捷配置等特點、工作原理、報文格式和應用場景。通過 W55MH32實戰例程展示動態獲取網絡地址信息過程,含注冊定時器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測與信息打印,PC端能 PING通設備。

下一篇文章將講解如何在 W55MH32芯片上實現 TCP客戶端模式,解析 TCP客戶端連接服務器進行回環測試的核心原理及應用,同時通過實戰例程講解具體實現步驟與要點,敬請期待!

WIZnet是一家無晶圓廠半導體公司,成立于 1998年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。

WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    41

    文章

    5997

    瀏覽量

    180795
  • 物聯網
    +關注

    關注

    2945

    文章

    47818

    瀏覽量

    414799
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第二章 開發板與芯片介紹 詳解W55MH32芯片及開發板

    本章介紹了W55MH32芯片及開發板。該芯片采用Cortex-M3內核,主頻216MHz,集成以太網功能,有L和Q兩種型號。配套開發板L-EVB功能豐富、Q-EVB為最小系統板,均含仿真器。
    的頭像 發表于 05-26 09:19 ?1431次閱讀
    <b class='flag-5'>第二章</b> 開發板與芯片介紹  詳解<b class='flag-5'>W55MH32</b>芯片及開發板

    第三 W55MH32 TCP Client示例

    本文介紹在 W55MH32?芯片上實現 TCP?客戶端模式進行數據回環測試的方法。闡述 TCP?協議概念、特點、與 UDP?區別、應用場景及相關機制。展示實現過程,包括開啟 Keepalive?功能,在主循環運行測試程序。燒錄例程后進行 PHY?鏈路檢測、獲取網絡地址,再借助網絡調試工具測試。
    的頭像 發表于 07-24 09:06 ?1121次閱讀
    第三<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> TCP Client<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現 UDP?通信及數據回環測試的方法。闡述了 UDP?協議的概念、特點、應用場景、報文傳輸流程和報文結構,展示了實現過程,借助網絡調試工具完成測試。
    的頭像 發表于 07-24 09:13 ?1041次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第六 W55MH32 UDP?Multicast示例

    本文介紹了在W55MH32芯片上實現UDP組播的原理、應用場景及回環測試方法,并通過實戰代碼展示了其具體實現過程。下一篇文章將聚焦DNS例程,講解其工作原理及實現方法,幫助大家更深入地理解網絡通信。敬請期待!
    的頭像 發表于 07-24 09:19 ?988次閱讀
    第六<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP?Multicast<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實現 HTTP Server?功能,并通過瀏覽器修改其網絡地址信息的方法。闡述了 HTTP?協議的概念、特點、應用場景、工作流程、請求方法、響應內容,以及 Web?頁面構成和交互方式。展示了在W55MH32上實現的過程。
    的頭像 發表于 07-24 09:35 ?1105次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實現SNTP授時功能,通過實例詳細展示了從SNTP服務器同步時間的實現流程,包括時間請求、響應解析和本地時間校準等核心步驟。文章還對SNTP的應用場景進行了分析,幫助讀者理解其在時間同步中的實際應用價值。
    的頭像 發表于 07-24 09:43 ?1256次閱讀
    第十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第十二 W55MH32 NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現 NetBIOS?功能,通過實戰例程展示了利用 NetBIOS?進行名稱 PING?測試的具體過程,包括 NetBIOS?功能的調用、請求處理、名稱解析
    的頭像 發表于 07-24 09:58 ?816次閱讀
    第十二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文講解了如何在 W55MH32?芯片上實現 TFTP?協議,通過實戰例程詳細展示了使用 TFTP?客戶端模式從服務器獲取文本文件的過程,涵蓋 TFTP?初始化、發送讀請求、運行協議并處理結果等核心
    的頭像 發表于 07-24 10:37 ?1093次閱讀
    第十四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十五 W55MH32 SNMP示例

    本文講解了如何在 W55MH32?芯片上實現 SNMP?功能,通過實戰例程展示了使用 MIB Browser?管理 W55MH32?的具體過程,涵蓋在 MIB Browser?中創建分支、添加葉子
    的頭像 發表于 07-24 10:43 ?1044次閱讀
    第十五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNMP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過 IPRAW?模式實現 ICMP?協議中的 PING?命令,以進行網絡連通性測試,通過實戰例程展示了從發送 PING?請求、接收并解析回復到統計結果的完整
    的頭像 發表于 07-24 11:41 ?969次閱讀
    第十六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十七 W55MH32 ARP示例

    文講解了如何在 W55MH32?芯片上通過 MAC RAW?模式實現 ARP?協議,將 IP?地址解析為 MAC?地址,通過實戰例程展示了從發送 ARP?請求到接收并處理響應的完整過程。文章詳細介紹
    的頭像 發表于 07-24 11:49 ?1128次閱讀
    第十七<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 FTP?協議的服務器模式,通過實戰例程展示了使用 W55MH32?作為 FTP?服務器與 PC?端進行文件傳輸、目錄操作等功能的過程,涵蓋獲取網絡配置
    的頭像 發表于 07-24 11:55 ?776次閱讀
    第十八章 <b class='flag-5'>W55MH32</b> FTP_Server<b class='flag-5'>示例</b>

    第二十六章 W55MH32?上位機搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實現上位機搜索和配置功能,通過實戰例程展示了使用開源上位機配置工具 SmartConfigTool?搜索局域網中的 W55MH32?并進行網絡地址配置的過程
    的頭像 發表于 07-24 16:13 ?896次閱讀
    <b class='flag-5'>第二</b>十六章 <b class='flag-5'>W55MH32</b>?上位機搜索和配置<b class='flag-5'>示例</b>

    第二十七章 W55MH32?Interrupt示例

    本文講解了如何在 W55MH32?芯片上使用 TOE?中斷功能并進行回環數據測試,通過實戰例程展示了從初始化中斷引腳、處理中斷、開啟中斷功能到在主循環中運行 TCP?回環服務器的完整過程。文章詳細
    的頭像 發表于 07-24 16:14 ?707次閱讀
    <b class='flag-5'>第二十七章</b> <b class='flag-5'>W55MH32</b>?Interrupt<b class='flag-5'>示例</b>

    第三十 W55MH32 HTTP_Server&amp;NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現 HTTP_Server?與 NetBIOS?功能,并通過 NetBIOS?訪問 HTTP?服務器網頁內容,通過實戰例程展示了在主循環中并行處理 HTTP?與 NetBIOS?相關事務的過程。
    的頭像 發表于 07-24 16:21 ?1541次閱讀
    第三十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP_Server&amp;NetBIOS<b class='flag-5'>示例</b>