chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第二章 W55MH32 DHCP示例

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

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗(yàn)——W55MH32高性能以太網(wǎng)單片機(jī)

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

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

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

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

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

若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。

wKgZO2iBhEGADwC9AACHawDEnho263.png

第二章 W55MH32 DHCP示例

本篇文章我們將詳細(xì)講解DHCP協(xié)議的基本信息、優(yōu)勢(shì)特點(diǎn)、工作原理、應(yīng)用場(chǎng)景,并通過實(shí)戰(zhàn)例程,為大家講解如何使用W55MH32動(dòng)態(tài)獲取IP信息,幫助讀者更好地了解并運(yùn)用這一協(xié)議。

有關(guān)W55MH32的初始化過程,請(qǐng)參考相關(guān)章節(jié),這里將不再詳述。

1 DHCP協(xié)議簡(jiǎn)介

DHCP(Dynamic Host Configuration Protocol)即動(dòng)態(tài)主機(jī)配置協(xié)議,是一個(gè)應(yīng)用層協(xié)議。它主要用于在 IP網(wǎng)絡(luò)中為客戶端自動(dòng)分配 IP地址及其他相關(guān)網(wǎng)絡(luò)配置參數(shù),如子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)、DNS服務(wù)器地址等。這種動(dòng)態(tài)分配的方式大大簡(jiǎn)化了網(wǎng)絡(luò)管理員的工作,并且能夠更有效地利用有限的 IP地址資源。

2 DHCP協(xié)議特點(diǎn)

便捷配置與管控:DHCP可自動(dòng)分配IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS等網(wǎng)絡(luò)參數(shù),設(shè)備入網(wǎng)即自動(dòng)獲取,用戶無(wú)需手動(dòng)操作。管理員能通過服務(wù)器集中管理IP分配,網(wǎng)絡(luò)架構(gòu)調(diào)整時(shí),修改服務(wù)器設(shè)置,客戶端自動(dòng)適配;靜態(tài)IP則要逐臺(tái)手動(dòng)輸入、調(diào)整,流程繁瑣還易出錯(cuò)。

靈活資源利用:DHCP動(dòng)態(tài)分配IP,設(shè)備離線后地址回池再利用,契合公共場(chǎng)所臨時(shí)大量接入需求,提升地址利用率;還能按需靈活調(diào)配,為關(guān)鍵設(shè)備保留靜態(tài)IP,其余動(dòng)態(tài)分配。靜態(tài)IP固定占用,閑置浪費(fèi)資源,靈活性差。

高效維護(hù)與排障:DHCP自動(dòng)分配,規(guī)避手動(dòng)配置錯(cuò)誤與IP地址沖突,服務(wù)器詳細(xì)記錄分配情況。網(wǎng)絡(luò)故障時(shí),管理員依服務(wù)器日志鎖定故障設(shè)備排查;靜態(tài)IP手動(dòng)配置易沖突,故障排查缺少有效記錄,難度大、耗時(shí)久。

適配移動(dòng)與拓展:移動(dòng)設(shè)備橫跨網(wǎng)絡(luò)時(shí),DHCP讓其自動(dòng)獲取IP配置,無(wú)需手動(dòng)切換;網(wǎng)絡(luò)規(guī)模擴(kuò)大、新增設(shè)備時(shí),DHCP自動(dòng)分配地址,助力快速擴(kuò)容。靜態(tài)IP需提前規(guī)劃,易現(xiàn)地址不足、分配不合理問題,還增加設(shè)備移動(dòng)操作難度。

3 DHCP工作原理

DHCP工作原理如圖所示:

wKgZO2iBhEGAWhltAAAf55K7z1I506.png

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

發(fā)現(xiàn)階段:客戶端接入網(wǎng)絡(luò)時(shí)以廣播形式發(fā)送DHCP Discover報(bào)文(目的IP是255.255.255.255,源IP是0.0.0.0)尋找DHCP服務(wù)器,報(bào)文中含客戶端MAC地址。若服務(wù)器和客戶端不在同一子網(wǎng),會(huì)通過中繼代理(如路由器)轉(zhuǎn)發(fā)。

提供階段:DHCP服務(wù)器收到Discover報(bào)文后,從IP地址池選一個(gè)未分配的IP地址,將其和子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)、DNS服務(wù)器地址等信息封裝進(jìn)DHCP Offer報(bào)文,以廣播或單播方式發(fā)給客戶端,可能會(huì)有多個(gè)Offer報(bào)文。

請(qǐng)求階段:客戶端收到多個(gè)Offer后選擇一個(gè),以廣播形式發(fā)送DHCP Request報(bào)文請(qǐng)求分配該IP地址等配置信息,且發(fā)送ARP請(qǐng)求檢查IP地址唯一性。

確認(rèn)階段:服務(wù)器收到Request報(bào)文后,檢查IP地址是否可用。若可用,將以廣播或單播的形式發(fā)送DHCP Ack報(bào)文,客戶端收到后完成網(wǎng)絡(luò)配置正常上網(wǎng)。若不可用,發(fā)送DHCP Nak報(bào)文,客戶端收到后重新發(fā)起Discover流程。

4 DHCP協(xié)議報(bào)文

DHCP的報(bào)文格式如下:

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報(bào)文各字段的說明如下表所示:

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

Discover報(bào)文實(shí)例:客戶端通過UDP廣播的方式發(fā)送DHCP發(fā)現(xiàn)報(bào)文,報(bào)文中包含了客戶端MAC地址、主機(jī)名和請(qǐng)求的IP地址等信息

|報(bào)文解析|
Message type: Boot Request (1)(op code為1,客戶端請(qǐng)求報(bào)文)
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

|報(bào)文原文|
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報(bào)文實(shí)例:DHCP服務(wù)器收到Discover報(bào)文后,從IP地址池選一個(gè)未分配的IP地址,將其和子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)等信息封裝進(jìn)Offer報(bào)文以廣播或單播(這里為廣播的方式)方式發(fā)給客戶端

|報(bào)文解析|
Message type: Boot Reply (2)(op code為2,服務(wù)器響應(yīng)報(bào)文)
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
|報(bào)文原文|
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

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

5 DHCP應(yīng)用場(chǎng)景

DHCP的應(yīng)用場(chǎng)景通常集中在需要?jiǎng)討B(tài)分配IP地址的局域網(wǎng)環(huán)境中。例如,在大型的辦公環(huán)境或者學(xué)校中,由于有大量的網(wǎng)絡(luò)設(shè)備需要連接到網(wǎng)絡(luò),手動(dòng)為每個(gè)設(shè)備分配和管理IP地址會(huì)非常繁瑣且容易出錯(cuò)。使用DHCP可以集中管理IP地址的分配,提高網(wǎng)絡(luò)管理員的工作效率,減少錯(cuò)誤的發(fā)生,且可以適應(yīng)網(wǎng)絡(luò)變化。

6實(shí)現(xiàn)過程

接下來(lái),我們一起來(lái)看看如何在W55MH32上實(shí)現(xiàn)DHCP動(dòng)態(tài)獲取網(wǎng)絡(luò)地址信息。

注意:使用DHCP動(dòng)態(tài)獲取IP時(shí),必需將網(wǎng)絡(luò)結(jié)構(gòu)體配置中dhcp的值改為NETINFO_DHCP,這樣才能運(yùn)行DHCP模式。

步驟一:注冊(cè)DHCP定時(shí)器中斷到1s定時(shí)器中:

/**
* @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);
   }
}

注冊(cè)DHCP定時(shí)器中斷主要為了DHCP超時(shí)處理。

在dhcp.h文件中,定義了DHCP超時(shí)時(shí)間、重試次數(shù)、端口號(hào)和主機(jī)名等內(nèi)容:

/* 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"

步驟二:?jiǎn)⒂肈HCP動(dòng)態(tài)獲?。?/strong>

首先需要將默認(rèn)網(wǎng)絡(luò)地址信息結(jié)構(gòu)體中的模式改為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獲取網(wǎng)絡(luò)地址信息

首先是在初始化完硬件和TOE之后調(diào)用network_init進(jìn)行網(wǎng)絡(luò)地址信息配置

network_init(ethernet_buf, &default_net_info);

這個(gè)函數(shù)需要將DHCP處理用到的緩存數(shù)組以及默認(rèn)網(wǎng)絡(luò)地址信息傳入,函數(shù)具體內(nèi)容如下:

/**
* @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();
}

在這個(gè)函數(shù)中,會(huì)先設(shè)置一遍網(wǎng)絡(luò)地址到W55MH32中,然后判斷模式是否為DHCP模式,如果為DHCP模式,則使用wiz_dhcp_process函數(shù)來(lái)執(zhí)行DHCP進(jìn)程,在通過DHCP方式成功獲取到網(wǎng)絡(luò)地址后更新到W55MH32中,最后將網(wǎng)絡(luò)地址信息打印出來(lái)。wiz_dhcp_process函數(shù)內(nèi)容如下:

/**
* @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;
       }
   }
}

在該函數(shù)體中,首先會(huì)調(diào)用DHCP_init函數(shù)進(jìn)行初始化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主循環(huán)中運(yùn)行DHCP_run函數(shù),它的主要作用是進(jìn)行DHCP組包,發(fā)送發(fā)現(xiàn)、請(qǐng)求等報(bào)文,對(duì)服務(wù)器的提供、響應(yīng)等內(nèi)容進(jìn)行解析以及超時(shí)處理,這里只需要根據(jù)DHCP_run函數(shù)的返回值進(jìn)行相應(yīng)處理即可。DHCP_run函數(shù)內(nèi)容如下:

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運(yùn)行結(jié)果

燒錄例程運(yùn)行后,首先打印了PHY鏈路檢測(cè)的結(jié)果以及DHCP日志信息,然后打印了網(wǎng)絡(luò)地址信息,這里可以看到配置方式為DHCP,IP地址為192.168.1.117,最后是PING提示消息。

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

wKgZPGiBhEGAO_jOAACWGcew2vs443.png

7總結(jié)

本文介紹 DHCP協(xié)議,包括其在 IP網(wǎng)絡(luò)自動(dòng)分配參數(shù)的功能、便捷配置等特點(diǎn)、工作原理、報(bào)文格式和應(yīng)用場(chǎng)景。通過 W55MH32實(shí)戰(zhàn)例程展示動(dòng)態(tài)獲取網(wǎng)絡(luò)地址信息過程,含注冊(cè)定時(shí)器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測(cè)與信息打印,PC端能 PING通設(shè)備。

下一篇文章將講解如何在 W55MH32芯片上實(shí)現(xiàn) TCP客戶端模式,解析 TCP客戶端連接服務(wù)器進(jìn)行回環(huán)測(cè)試的核心原理及應(yīng)用,同時(shí)通過實(shí)戰(zhàn)例程講解具體實(shí)現(xiàn)步驟與要點(diǎn),敬請(qǐng)期待!

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

WIZnet在全球擁有 70多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    41

    文章

    5864

    瀏覽量

    178577
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2938

    文章

    46912

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)板

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

    第三 W55MH32 TCP Client示例

    本文介紹在 W55MH32?芯片上實(shí)現(xiàn) TCP?客戶端模式進(jìn)行數(shù)據(jù)回環(huán)測(cè)試的方法。闡述 TCP?協(xié)議概念、特點(diǎn)、與 UDP?區(qū)別、應(yīng)用場(chǎng)景及相關(guān)機(jī)制。展示實(shí)現(xiàn)過程,包括開啟 Keepalive?功能,在主循環(huán)運(yùn)行測(cè)試程序。燒錄例程后進(jìn)行 PHY?鏈路檢測(cè)、獲取網(wǎng)絡(luò)地址,再借助網(wǎng)絡(luò)調(diào)試工具測(cè)試。
    的頭像 發(fā)表于 07-24 09:06 ?543次閱讀
    第三<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> TCP Client<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實(shí)現(xiàn) UDP?通信及數(shù)據(jù)回環(huán)測(cè)試的方法。闡述了 UDP?協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、報(bào)文傳輸流程和報(bào)文結(jié)構(gòu),展示了實(shí)現(xiàn)過程,借助網(wǎng)絡(luò)調(diào)試工具完成測(cè)試。
    的頭像 發(fā)表于 07-24 09:13 ?433次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第六 W55MH32 UDP?Multicast示例

    本文介紹了在W55MH32芯片上實(shí)現(xiàn)UDP組播的原理、應(yīng)用場(chǎng)景及回環(huán)測(cè)試方法,并通過實(shí)戰(zhàn)代碼展示了其具體實(shí)現(xiàn)過程。下一篇文章將聚焦DNS例程,講解其工作原理及實(shí)現(xiàn)方法,幫助大家更深入地理解網(wǎng)絡(luò)通信。敬請(qǐng)期待!
    的頭像 發(fā)表于 07-24 09:19 ?445次閱讀
    第六<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP?Multicast<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實(shí)現(xiàn) HTTP Server?功能,并通過瀏覽器修改其網(wǎng)絡(luò)地址信息的方法。闡述了 HTTP?協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、工作流程、請(qǐng)求方法、響應(yīng)內(nèi)容,以及 Web?頁(yè)面構(gòu)成和交互方式。展示了在W55MH32上實(shí)現(xiàn)的過程。
    的頭像 發(fā)表于 07-24 09:35 ?417次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實(shí)現(xiàn)SNTP授時(shí)功能,通過實(shí)例詳細(xì)展示了從SNTP服務(wù)器同步時(shí)間的實(shí)現(xiàn)流程,包括時(shí)間請(qǐng)求、響應(yīng)解析和本地時(shí)間校準(zhǔn)等核心步驟。文章還對(duì)SNTP的應(yīng)用場(chǎng)景進(jìn)行了分析,幫助讀者理解其在時(shí)間同步中的實(shí)際應(yīng)用價(jià)值。
    的頭像 發(fā)表于 07-24 09:43 ?573次閱讀
    第十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第十二 W55MH32 NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) NetBIOS?功能,通過實(shí)戰(zhàn)例程展示了利用 NetBIOS?進(jìn)行名稱 PING?測(cè)試的具體過程,包括 NetBIOS?功能的調(diào)用、請(qǐng)求處理、名稱解析
    的頭像 發(fā)表于 07-24 09:58 ?425次閱讀
    第十二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

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

    第十五 W55MH32 SNMP示例

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

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過 IPRAW?模式實(shí)現(xiàn) ICMP?協(xié)議中的 PING?命令,以進(jìn)行網(wǎng)絡(luò)連通性測(cè)試,通過實(shí)戰(zhàn)例程展示了從發(fā)送 PING?請(qǐng)求、接收并解析回復(fù)到統(tǒng)計(jì)結(jié)果的完整
    的頭像 發(fā)表于 07-24 11:41 ?334次閱讀
    第十六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十七 W55MH32 ARP示例

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

    第十八章 W55MH32 FTP_Server示例

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

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

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn)上位機(jī)搜索和配置功能,通過實(shí)戰(zhàn)例程展示了使用開源上位機(jī)配置工具 SmartConfigTool?搜索局域網(wǎng)中的 W55MH32?并進(jìn)行網(wǎng)絡(luò)地址配置的過程
    的頭像 發(fā)表于 07-24 16:13 ?418次閱讀
    <b class='flag-5'>第二</b>十六章 <b class='flag-5'>W55MH32</b>?上位機(jī)搜索和配置<b class='flag-5'>示例</b>

    第二十七章 W55MH32?Interrupt示例

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

    第三十 W55MH32 HTTP_Server&amp;NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) HTTP_Server?與 NetBIOS?功能,并通過 NetBIOS?訪問 HTTP?服務(wù)器網(wǎng)頁(yè)內(nèi)容,通過實(shí)戰(zhàn)例程展示了在主循環(huán)中并行處理 HTTP?與 NetBIOS?相關(guān)事務(wù)的過程。
    的頭像 發(fā)表于 07-24 16:21 ?601次閱讀
    第三十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP_Server&amp;NetBIOS<b class='flag-5'>示例</b>