單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆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è)控制中多樣化的連接需求,無論是與各類傳感器、執(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)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第十七章 W55MH32 ARP示例
本篇文章,我們將詳細(xì)介紹如何在W55MH32芯片上面實(shí)現(xiàn)MAC RAW模式。并通過實(shí)戰(zhàn)例程,為大家講解如何使用MAC RAW模式實(shí)現(xiàn)ARP解析IP地址為MAC地址。
該例程用到的其他網(wǎng)絡(luò)協(xié)議,例如 DHCP,請(qǐng)參考相關(guān)章節(jié)。有關(guān) W55MH32的初始化過程,請(qǐng)參考Network Install章節(jié),這里將不再贅述。
1 MACRAW模式簡介
MACRAW模式是W55MH32 TOE提供的一種底層通信模式,芯片會(huì)直接接收和發(fā)送以太網(wǎng)幀,而無需解析 TCP/IP層的協(xié)議。通過這種模式,用戶可以直接操作以太網(wǎng)幀的頭部(如目的 MAC地址、源 MAC地址、以太類型等)和有效負(fù)載數(shù)據(jù)。
注意:僅Socket0能設(shè)置為MACRAW模式。
2 ARP協(xié)議簡介
ARP(Address Resolution Protocol,地址解析協(xié)議)是一個(gè)網(wǎng)絡(luò)協(xié)議,用于通過已知的IP地址解析對(duì)應(yīng)的MAC地址,工作于OSI模型的第二層(數(shù)據(jù)鏈路層),它是IPv4網(wǎng)絡(luò)中局域網(wǎng)通信的重要組成部分。
3 ARP協(xié)議特點(diǎn)
協(xié)議工作范圍:ARP協(xié)議僅在同一個(gè)局域網(wǎng)(LAN)內(nèi)工作,因?yàn)閺V播請(qǐng)求無法跨越路由器。
緩存機(jī)制:為了減少頻繁的廣播,設(shè)備會(huì)將IP-MAC的對(duì)應(yīng)關(guān)系緩存一段時(shí)間。
協(xié)議類型:ARP請(qǐng)求(Opcode = 1):用于查詢目標(biāo)設(shè)備的MAC地址。
ARP響應(yīng)(Opcode = 2):用于回復(fù)請(qǐng)求方的ARP消息。
4 ARP協(xié)議請(qǐng)求的工作流程
當(dāng)發(fā)送方主機(jī)A需要與目標(biāo)主機(jī)B通信,但只知道目標(biāo)主機(jī)的IP地址,而不知道目標(biāo)主機(jī)的MAC地址,并且自己的ARP緩存表中也無對(duì)應(yīng)關(guān)系,此時(shí)會(huì)觸發(fā)ARP請(qǐng)求流程:
構(gòu)建ARP請(qǐng)求:發(fā)送方需要構(gòu)建一個(gè)ARP請(qǐng)求數(shù)據(jù)包。
廣播ARP請(qǐng)求:發(fā)送方將構(gòu)建好的ARP請(qǐng)求封裝為以太網(wǎng)幀,使用廣播方式發(fā)送到局域網(wǎng)。
目標(biāo)主機(jī)接收并處理:網(wǎng)絡(luò)中的所有主機(jī)都會(huì)收到廣播幀,但只有目標(biāo)主機(jī)(IP地址匹配)會(huì)響應(yīng)。
發(fā)送方接收ARP響應(yīng),并更新自己的ARP緩存表。
5 ARP協(xié)議應(yīng)用場(chǎng)景
地址解析:當(dāng)設(shè)備需要進(jìn)行鏈路層通信時(shí),可以使用ARP協(xié)議獲取對(duì)方MAC地址。
網(wǎng)絡(luò)調(diào)試與診斷:在調(diào)試嵌入式設(shè)備時(shí),通過發(fā)送 ARP請(qǐng)求驗(yàn)證設(shè)備的網(wǎng)絡(luò)連通性。
6 ARP協(xié)議的安全風(fēng)險(xiǎn)及防護(hù)措施
盡管ARP協(xié)議在局域網(wǎng)通信中非常重要,但它也存在安全風(fēng)險(xiǎn)。例如,ARP欺騙是一種常見的攻擊手段,攻擊者可以通過偽造ARP回復(fù)來誤導(dǎo)其他設(shè)備,從而竊取敏感信息或中斷網(wǎng)絡(luò)通信。為了防范ARP欺騙攻擊,可以采取以下措施:
1.使用靜態(tài)ARP表:通過配置靜態(tài)ARP表項(xiàng),可以限制和指定IP地址的設(shè)備通信時(shí)只使用指定的MAC地址。這樣,即使攻擊者發(fā)送了偽造的ARP報(bào)文,也無法修改此表項(xiàng)的IP地址和MAC地址的映射關(guān)系。
2.端口安全和靜態(tài)IP/MAC綁定:在接入交換機(jī)上啟用端口安全功能,并將用戶IP/MAC地址進(jìn)行靜態(tài)綁定。這種方法可以防止用戶發(fā)出假冒網(wǎng)關(guān)的ARP信息。
3.動(dòng)態(tài)ARP檢查(DAI)與DHCP偵聽:結(jié)合使用動(dòng)態(tài)ARP檢查和DHCP偵聽功能,可以對(duì)用戶發(fā)出的ARP報(bào)文進(jìn)行合法性檢測(cè),并過濾掉不符合規(guī)則的ARP報(bào)文。
4.加密通信協(xié)議:通過使用加密通信協(xié)議,可以防止網(wǎng)絡(luò)流量被竊聽和篡改。
5.防火墻和交換機(jī)配置:在防火墻和交換機(jī)上設(shè)置相應(yīng)的安全策略,例如啟用特殊的ARP報(bào)文過濾功能。
6客戶端管理:確保所有終端設(shè)備都遵循安全策略,并定期更新和打補(bǔ)丁。
7 ARP協(xié)議的工作原理
發(fā)送ARP請(qǐng)求:
當(dāng)設(shè)備A需要與設(shè)備B通信時(shí),首先檢查ARP緩存是否存有設(shè)備B的MAC地址。如果ARP緩存中沒有設(shè)備B的MAC地址,設(shè)備A會(huì)發(fā)送一條廣播ARP請(qǐng)求消息,格式為:“誰是IP地址 X.X.X.X?請(qǐng)告訴我(設(shè)備A的IP地址和MAC地址)。”
接收ARP響應(yīng):
設(shè)備B收到廣播請(qǐng)求后,檢查請(qǐng)求中的IP地址是否與自身匹配。如果匹配,設(shè)備B發(fā)送一條單播ARP響應(yīng)消息給設(shè)備A,告知設(shè)備B的MAC地址。設(shè)備A收到響應(yīng)后,將設(shè)備B的MAC地址緩存起來,用于后續(xù)通信。
8 ARP報(bào)文格式
一個(gè)標(biāo)準(zhǔn)的ARP報(bào)文由以下字段組成,總長度為28字節(jié)(不包含鏈路層幀頭):
字段名 | 長度(字節(jié)) | 描述 |
Hardware Type | 2 | 表示硬件類型,常見值為1(以太網(wǎng))。 |
Protocol Type | 2 | 表示需要解析的協(xié)議類型,常見值為0x0800(IPv4)。 |
Hardware Address Length | 1 | 硬件地址(MAC地址)的長度,通常為6字節(jié)。 |
Protocol Address Length | 1 | 協(xié)議地址(IP地址)的長度,通常為4字節(jié)(IPv4)。 |
Operation Code | 2 | 指示操作類型:1(請(qǐng)求),2(響應(yīng))。 |
Sender Hardware Address | 6 | 請(qǐng)求方的MAC地址。 |
Sender Protocol Address | 4 | 請(qǐng)求方的IP地址。 |
Target Hardware Address | 6 | 目標(biāo)設(shè)備的MAC地址。請(qǐng)求中此字段為0。 |
Target Protocol Address | 4 | 目標(biāo)設(shè)備的IP地址。 |
報(bào)文字段詳解
硬件類型 (Hardware Type):說明所使用的網(wǎng)絡(luò)類型,例如:
1:以太網(wǎng)。
6:IEEE 802網(wǎng)絡(luò)。
對(duì)于以太網(wǎng)的ARP報(bào)文,該值始終為0x0001。
協(xié)議類型 (Protocol Type):表示要解析的協(xié)議類型,例如:
0x0800:表示IPv4地址解析。
0x86DD:表示IPv6(通常由ND協(xié)議替代ARP)。
硬件地址長度 (Hardware Address Length):定義硬件地址(MAC地址)的長度,通常為6字節(jié)(以太網(wǎng))。
協(xié)議地址長度 (Protocol Address Length):定義協(xié)議地址(IP地址)的長度,通常為4字節(jié)(IPv4)。
操作碼 (Operation Code):說明ARP的操作類型:
1:ARP請(qǐng)求。
2:ARP響應(yīng)。
發(fā)送方硬件地址 (Sender Hardware Address):包含請(qǐng)求方設(shè)備的MAC地址。
發(fā)送方協(xié)議地址 (Sender Protocol Address):包含請(qǐng)求方設(shè)備的IP地址。
目標(biāo)硬件地址 (Target Hardware Address):在ARP請(qǐng)求中,這一字段為空(全0)。在ARP響應(yīng)中,包含目標(biāo)設(shè)備的MAC地址。
目標(biāo)協(xié)議地址 (Target Protocol Address):包含目標(biāo)設(shè)備的IP地址。
報(bào)文內(nèi)容:
ARP Probe請(qǐng)求報(bào)文:
|報(bào)文解析| Address Resolution Protocol (ARP Probe) (ARP Probe請(qǐng)求報(bào)文,用于檢測(cè)目標(biāo)IP地址是否沖突) Hardware type: Ethernet (1) (硬件類型:1表示以太網(wǎng)) Protocol type: IPv4 (0x0800) (協(xié)議類型:0x0800表示IPv4) Hardware size: 6 (硬件地址長度:6字節(jié)) Protocol size: 4 (協(xié)議地址長度:4字節(jié)) Opcode: request (1) (操作碼:1表示ARP請(qǐng)求) [Is probe: True] (是否為探測(cè):是,用于檢測(cè)IP沖突) Sender MAC address: Wiznet_12:22:12 (00:08:dc:12:22:12) (發(fā)送方MAC地址:00:08:dc:12:22:12) Sender IP address: 0.0.0.0 (發(fā)送方IP地址:未分配,用于探測(cè)) Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) (目標(biāo)MAC地址:全0,未指定) Target IP address: 192.168.1.105 (目標(biāo)IP地址:192.168.1.105,探測(cè)對(duì)象) |報(bào)文原文| 00 01 08 00 06 04 00 01 00 08 dc 12 22 12 00 00 00 00 00 00 00 00 00 00 c0 a8 01 69
ARP請(qǐng)求報(bào)文:
|報(bào)文解析| Address Resolution Protocol (request) (請(qǐng)求報(bào)文) Hardware type: Ethernet (1) (硬件類型:1表示以太網(wǎng)) Protocol type: IPv4 (0x0800) (協(xié)議類型:0x0800表示IPv4) Hardware size: 6 (硬件地址長度:6字節(jié)) Protocol size: 4 (協(xié)議地址長度:4字節(jié)) Opcode: request (1) (操作碼:1表示ARP請(qǐng)求) Sender MAC address: Wiznet_12:22:12 (00:08:dc:12:22:12) (發(fā)送方MAC地址) Sender IP address: 192.168.1.105 (發(fā)送方IP地址:192.168.1.105) Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) (未知目標(biāo)設(shè)備的物理地址) Target IP address: 192.168.1.138 (目標(biāo)IP地址:192.168.1.138,目標(biāo)設(shè)備的IPv4地址) |報(bào)文原文| 00 01 08 00 06 04 00 01 00 08 dc 12 22 12 c0 a8 01 69 00 00 00 00 00 00 c0 a8 01 8a
ARP響應(yīng)報(bào)文:
|報(bào)文解析| Address Resolution Protocol (reply) (響應(yīng)報(bào)文) Hardware type: Ethernet (1) (硬件類型:1表示以太網(wǎng)) Protocol type: IPv4 (0x0800) (協(xié)議類型:0x0800表示IPv4) Hardware size: 6 (硬件地址長度:6字節(jié)) Protocol size: 4 (協(xié)議地址長度:4字節(jié)) Opcode: reply (2) (操作碼:2表示ARP響應(yīng)) Sender MAC address: HP_b1:37:11 (64:4e:d7:b1:37:11) (發(fā)送方MAC地址:64:4e:d7:b1:37:11) Sender IP address: 192.168.1.138 (發(fā)送方IP地址:192.168.1.138) Target MAC address: Wiznet_12:22:12 (00:08:dc:12:22:12) (目標(biāo)MAC地址,ARP請(qǐng)求者的物理地址) Target IP address: 192.168.1.105 (目標(biāo)IP地址:192.168.1.105,ARP請(qǐng)求者的IPv4地址) |報(bào)文原文| 00 01 08 00 06 04 00 02 64 4e d7 b1 37 11 c0 a8 01 8a 00 08 dc 12 22 12 c0 a8 01 69
9實(shí)現(xiàn)過程
接下來,我們看看如何在W55MH32上實(shí)現(xiàn)ARP請(qǐng)求。
注意:測(cè)試實(shí)例需要PC端和W55MH32處于同一網(wǎng)段。
步驟1:在主循環(huán)中調(diào)用do_arp()函數(shù),執(zhí)行ARP請(qǐng)求流程
while (1) { do_arp(SOCKET_ID, ethernet_buf, dest_ip); }
do_arp()函數(shù)如下所示:
void do_arp(uint8_t sn, uint8_t *buf, uint8_t *dest_ip) { uint16_t rlen = 0; uint16_t local_port = 5000; uint16_t cnt = 0; switch (getSn_SR(sn)) { case SOCK_CLOSED: close(sn); socket(sn, Sn_MR_MACRAW, local_port, 0x00); break; case SOCK_MACRAW: arp_request(sn, local_port, dest_ip); while (1) { if ((rlen = getSn_RX_RSR(sn)) > 0) { arp_reply(sn, buf, rlen); break; } if (cnt > 1000) { printf("Request Time out.rn"); cnt = 0; break; } else { cnt++; delay_ms(5); } } break; } if (arp_succ_flag) while (1); }
進(jìn)入該函數(shù)后,程序會(huì)執(zhí)行一個(gè)狀態(tài)機(jī),當(dāng)socket狀態(tài)為關(guān)閉狀態(tài)時(shí)開啟一個(gè)MACRAW模式的socket。當(dāng)socket成功打開為MAC RAW模式后,執(zhí)行arp_request()函數(shù)發(fā)送ARP請(qǐng)求,然后進(jìn)入一個(gè)循環(huán),當(dāng)成功接收到響應(yīng)時(shí),執(zhí)行arp_reply()函數(shù)解析請(qǐng)求。當(dāng)超過5秒未能得到響應(yīng)時(shí),則ARP請(qǐng)求失敗。當(dāng)arp_succ_flag標(biāo)志位為1時(shí),說明ARP請(qǐng)求成功。
arp_request()函數(shù)如下所示:
void arp_request(uint8_t sn, uint16_t port, uint8_t *dest_ip) { uint16_t i; uint8_t broadcast_addr[4] = {0xff, 0xff, 0xff, 0xff}; for (i = 0; i < 6; i++) { pARPMSG.dst_mac[i] = 0xff; // Broadcast address in an Ethernet frame pARPMSG.tgt_mac[i] = 0x00; if (i < 4) { pARPMSG.tgt_ip[i] = dest_ip[i]; } } getSHAR(pARPMSG.src_mac); // Fill in the source MAC address of the link layer getSHAR(pARPMSG.sender_mac); // Fill in the MAC address of the sender in ARP getSIPR(pARPMSG.sender_ip); // Enter the IP address of the sender in ARP pARPMSG.msg_type = htons(ARP_TYPE); // ARP type pARPMSG.hw_type = htons(ETHER_TYPE); // Ethernet type pARPMSG.pro_type = htons(PRO_TYPE); // IP pARPMSG.hw_size = HW_SIZE; // 6 pARPMSG.pro_size = PRO_SIZE; // 4 pARPMSG.opcode = htons(ARP_REQUEST); // request: 0x0001; reply: 0x0002 if (sendto(sn, (uint8_t *)&pARPMSG, sizeof(pARPMSG), broadcast_addr, port) != sizeof(pARPMSG)) { printf("Fail to send arp request packet.rn"); } else { if (pARPMSG.opcode == htons(ARP_REQUEST)) { printf("Who has %d.%d.%d.%d ? Tell %d.%d.%d.%drn", pARPMSG.tgt_ip[0], pARPMSG.tgt_ip[1],pARPMSG.tgt_ip[2], pARPMSG.tgt_ip[3], pARPMSG.sender_ip[0], pARPMSG.sender_ip[1], pARPMSG.sender_ip[2], pARPMSG.sender_ip[3]); } else { printf("Opcode has wrong value. check opcode!rn"); } } }
在這個(gè)函數(shù)中,進(jìn)行了ARP報(bào)文的組包以及發(fā)送。
arp_reply()函數(shù)如下所示:
void arp_reply(uint8_t sn, uint8_t *buff, uint16_t rlen) { uint8_t destip[4]; uint16_t destport; uint8_t ret_arp_reply[128]; uint8_t i; recvfrom(sn, (uint8_t *)buff, rlen, destip, &destport); if (buff[12] == ARP_TYPE_HI && buff[13] == ARP_TYPE_LO) { aAPRMSG = (ARPMSG *)buff; if ((aAPRMSG->opcode) == htons(ARP_REPLY)) { for (i = 0; i < 4; i++) { if (aAPRMSG-?>tgt_ip[i] != pARPMSG.tgt_ip[i]) { break; } arp_succ_flag = 1; } memset(ret_arp_reply, 0x00, 128); sprintf((char *)ret_arp_reply, "%d.%d.%d.%d is at %.2x.%.2x.%.2x.%.2x.%.2x.%.2xrn", aAPRMSG->sender_ip[0], aAPRMSG->sender_ip[1], aAPRMSG->sender_ip[2], aAPRMSG>sender_ip[3], aAPRMSG->sender_mac[0], aAPRMSG->sender_mac[1], aAPRMSG->sender_mac[2], aAPRMSG->sender_mac[3], aAPRMSG->sender_mac[4], aAPRMSG->sender_mac[5]); printf("%d.%d.%d.%d is at %.2x.%.2x.%.2x.%.2x.%.2x.%.2xrn", aAPRMSG->sender_ip[0], aAPRMSG->sender_ip[1], aAPRMSG->sender_ip[2], aAPRMSG->sender_ip[3], aAPRMSG->sender_mac[0], aAPRMSG->sender_mac[1], aAPRMSG->sender_mac[2], aAPRMSG->sender_mac[3], aAPRMSG->sender_mac[4], aAPRMSG->sender_mac[5]); } else if ((aAPRMSG->opcode) == htons(ARP_REQUEST)) { printf("Who has %d.%d.%d.%d ? Tell %.2x.%.2x.%.2x.%.2x.%.2x.%.2xrn", aAPRMSG->tgt_ip[0], aAPRMSG->tgt_ip[1], aAPRMSG->tgt_ip[2], aAPRMSG->tgt_ip[3], aAPRMSG->sender_mac[0], aAPRMSG->sender_mac[1], aAPRMSG->sender_mac[2], aAPRMSG->sender_mac[3], aAPRMSG->sender_mac[4], aAPRMSG->sender_mac[5]); } } else { // printf("This message is not ARP reply: opcode is not 0x02!rn"); } }
在這個(gè)函數(shù)中,我們會(huì)將接收到的ARP報(bào)文進(jìn)行校驗(yàn),如果ARP報(bào)文為回復(fù)報(bào)文,并且回復(fù)的IP地址與我們請(qǐng)求的IP地址匹配時(shí),將arp_succ_flag標(biāo)志位置一,表示ARP請(qǐng)求成功。
10運(yùn)行結(jié)果
燒錄例程運(yùn)行后,首先可以看到進(jìn)行了PHY鏈路檢測(cè),然后打印了設(shè)置的網(wǎng)絡(luò)地址信息,然后是執(zhí)行ARP請(qǐng)求以及請(qǐng)求結(jié)果,如下圖所示:
11總結(jié)
文講解了如何在 W55MH32芯片上通過 MAC RAW模式實(shí)現(xiàn) ARP協(xié)議,將 IP地址解析為 MAC地址,通過實(shí)戰(zhàn)例程展示了從發(fā)送 ARP請(qǐng)求到接收并處理響應(yīng)的完整過程。文章詳細(xì)介紹了 MAC RAW模式和 ARP協(xié)議的概念、特點(diǎn)、工作流程、應(yīng)用場(chǎng)景、安全風(fēng)險(xiǎn)及防護(hù)措施和報(bào)文格式,幫助讀者理解其在局域網(wǎng)通信中的實(shí)際應(yīng)用價(jià)值。
下一篇文章將聚焦 FTP協(xié)議服務(wù)器模式,解析其核心原理及在文件傳輸中的應(yīng)用,同時(shí)講解如何在相關(guān)設(shè)備上搭建 FTP服務(wù)器,敬請(qǐng)期待!
WIZnet是一家無晶圓廠半導(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多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6071文章
45254瀏覽量
659996 -
ARP
+關(guān)注
關(guān)注
0文章
51瀏覽量
15188
發(fā)布評(píng)論請(qǐng)先 登錄
第十七章 SPI——讀寫串行FLASH

第十七章 SPI

"STM32H7學(xué)習(xí)繼續(xù)(STM32H7系列5)第十七章比較實(shí)用,以后寫程序的時(shí)候會(huì)用到"

第二章 W55MH32 DHCP示例

第五章 W55MH32 UDP示例

第九章 W55MH32 HTTP Server示例

第十章 W55MH32 SNTP示例

第十一章 W55MH32 SMTP示例

第十二章 W55MH32 NetBIOS示例

第十四章 W55MH32 TFTP示例

第十五章 W55MH32 SNMP示例

第十六章 W55MH32 PING示例

第十八章 W55MH32 FTP_Server示例

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

第二十七章 W55MH32?Interrupt示例

評(píng)論