一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

有線網(wǎng)卡驅(qū)動(dòng)和動(dòng)態(tài)分配IP的詳細(xì)說明

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-05-31 17:40 ? 次閱讀

1.W5500簡(jiǎn)介

W5500 是一款全硬件 TCP/IP 嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡(jiǎn)易的互聯(lián)網(wǎng)連接方案。 W5500 集成了 TCP/IP 協(xié)議棧, 10/100M 以太網(wǎng)數(shù)據(jù)鏈路層(MAC)及物理層(PHY) ,使得用戶使用單芯片就能夠在他們的應(yīng)用中拓展網(wǎng)絡(luò)連接。
久經(jīng)市場(chǎng)考驗(yàn)的 WIZnet 全硬件 TCP/IP 協(xié)議棧支TCP,UDP,IPv4,ICMP,ARP,IGMP 以及 PPPoE 協(xié)議。 W5500 內(nèi)嵌 32K 字節(jié)片上緩存以供以太網(wǎng)包處理。如果你使用 W5500,你只需要一些簡(jiǎn)單的 Socket 編程就能實(shí)現(xiàn)以太網(wǎng)應(yīng)用。這將會(huì)比其他嵌入式以太網(wǎng)方案更加快捷、簡(jiǎn)便。用戶可以同時(shí)使用 8 個(gè)硬件 Socket 獨(dú)立通訊。
W5500 提供了 SPI(外設(shè)串行接口)從而能夠更加容易與外設(shè) MCU 整合。而且,W5500 的使用了新的高效 SPI 協(xié)議支持 80MHz 速率,從而能夠更好的實(shí)現(xiàn)高速網(wǎng)絡(luò)通訊。為了減少系統(tǒng)能耗, W5500 提供了網(wǎng)絡(luò)喚醒模式(WOL)及掉電模式供客戶選擇使用。

2.W5500特性

支持硬件 TCP/IP 協(xié)議: TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE

  • 支持 8 個(gè)獨(dú)立端口(Socket)同時(shí)通訊
  • 支持掉電模式
  • 支持網(wǎng)絡(luò)喚醒
  • 支持高速串行外設(shè)接口(SPI 模式 0, 3)
  • 內(nèi)部 32K 字節(jié)收發(fā)緩存
  • 內(nèi)嵌 10BaseT/100BaseTX 以太網(wǎng)物理層( PHY)
  • 支持自動(dòng)協(xié)商(10/100-Based 全雙工/半雙工)
  • 不支持 IP 分片
  • 3.3V 工作電壓, I/O 信號(hào)口 5V 耐壓;
  • LED 狀態(tài)顯示(全雙工/半雙工,網(wǎng)絡(luò)連接,網(wǎng)絡(luò)速度,活動(dòng)狀態(tài))
  • 48 引腳 LQFP 無鉛封裝(7x7mm, 0.5mm 間距)

3.應(yīng)用場(chǎng)合

  • 家庭網(wǎng)絡(luò)設(shè)備: 機(jī)頂盒、個(gè)人錄像機(jī)、數(shù)碼媒體適配器
  • 串行轉(zhuǎn)以太網(wǎng): 門禁控制、 LED 顯示屏、無線 AP 繼電器等
  • 并行轉(zhuǎn)以太網(wǎng): POS/微型打印機(jī)、復(fù)印機(jī)
  • USB 轉(zhuǎn)以太網(wǎng): 存儲(chǔ)設(shè)備、網(wǎng)絡(luò)打印機(jī)
  • GPIO 轉(zhuǎn)以太網(wǎng): 家庭網(wǎng)絡(luò)傳感器
  • 安全系統(tǒng): 數(shù)字錄像機(jī)、網(wǎng)絡(luò)攝像機(jī)、信息亭
  • 工廠和樓宇自動(dòng)化控制系統(tǒng)
  • 醫(yī)療監(jiān)測(cè)設(shè)備
  • 嵌入式服務(wù)器

W5500模塊圖

poYBAGKV4YCAPQeYAAXS4rkfy70626.png

4.接線方式

W5500模塊 STM32核心板
片選CS PB12
時(shí)鐘SCLK PB13
主機(jī)輸入MISO PB14
主機(jī)輸出MOSI PB15
INT PB0
RST PB1

5.SPI底層驅(qū)動(dòng)編寫

CONFIG_MSG  ConfigMsg;																	/*配置結(jié)構(gòu)體*/
/*定義MAC地址,如果多塊W5500網(wǎng)絡(luò)適配板在同一現(xiàn)場(chǎng)工作,請(qǐng)使用不同的MAC地址*/
uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11};

/*定義默認(rèn)IP信息*/
uint8 local_ip[4]  ={192,168,1,88};											/*定義W5500默認(rèn)IP地址*/
uint8 subnet[4]    ={255,255,255,0};										/*定義W5500默認(rèn)子網(wǎng)掩碼*/
uint8 gateway[4]   ={192,168,1,1};											/*定義W5500默認(rèn)網(wǎng)關(guān)*/
uint8 dns_server[4]={114,114,114,114};									/*定義W5500默認(rèn)DNS*/

uint16 local_port=5000;	                       					/*定義本地端口*/

/*定義遠(yuǎn)端IP信息*/
uint8  remote_ip[4]={192,168,1,102};										/*遠(yuǎn)端IP地址*/
uint16 remote_port=5000;																/*遠(yuǎn)端端口號(hào)*/

/*IP配置方法選擇,請(qǐng)自行選擇*/
uint8	ip_from=IP_FROM_DHCP;				

uint8   dhcp_ok   = 0;																	/*dhcp成功獲取IP*/
uint32	ms        = 0;																	/*毫秒計(jì)數(shù)*/
uint32	dhcp_time = 0;																	/*DHCP運(yùn)行計(jì)數(shù)*/
vu8	    ntptimer  = 0;																	/*NPT秒計(jì)數(shù)*/
/*硬件配置*/
void W5500_GPIO_Init(void)
{
  RCC->APB2ENR|=1<<3;
  GPIOB->CRH&=0x0000FFFF;
  GPIOB->CRH|=0x38330000;
  GPIOB->CRL&=0xFFFFFF00;
  GPIOB->CRL|=0x00000038;
  W5500_CS=1;
  W5500_RST=1;
}
/*模塊復(fù)位*/
void W5500_reset(void)
{
  W5500_RST=0;
  Delay_Us(2);
  W5500_RST=1;
  Delay_Ms(1000);
  Delay_Ms(600);
}
/*SPI讀寫一個(gè)字節(jié)*/
u8 SPI_WR_Byte(u8 byte)
{
  u8 data_rx=0;
  u8 i=0;
  for(i=0;i<8;i++)
  {
    W5500_SCLK=0;
    if(byte&0x80)W5500_MOSI=1;
    else W5500_MOSI=0;
    W5500_SCLK=1;
    byte<<=1;
    
    data_rx<<=1;
    if(W5500_MISO)data_rx|=0x01;
  }
  W5500_SCLK=0;
  return data_rx;
}
/*W5500底層收發(fā)一個(gè)字節(jié)*/
static u8 IINCHIP_SpiSendData(u8 dat)
{
   return(SPI_WR_Byte(dat));
}
/*向指定地址寫入一字節(jié)數(shù)據(jù)*/
void IINCHIP_WRITE( u32 addrbsb,  u8 data)
{
  W5500_CS=0;
  IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);	
  IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
  IINCHIP_SpiSendData( (addrbsb & 0x000000F8) + 4);  
  IINCHIP_SpiSendData(data); 
  W5500_CS=1;
}
/*從地址讀取讀取一字節(jié)數(shù)據(jù)*/
u8 IINCHIP_READ(u32 addrbsb)
{
  u8 data = 0;
  W5500_CS=0;
  IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);
  IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
  IINCHIP_SpiSendData( (addrbsb & 0x000000F8))    ;
  data = IINCHIP_SpiSendData(0x00); 
  W5500_CS=1;
  return data;
}
/*
向W5500指定地址寫入指定長(zhǎng)度數(shù)據(jù)
形參:addrbsb  -- 寫入的地址
	 buf  -- 要寫入的數(shù)據(jù)
	 len  -- 寫入的長(zhǎng)度
返回值:寫入的數(shù)據(jù)長(zhǎng)度
*/
u16 wiz_write_buf(u32 addrbsb,u8* buf,u16 len)
{
  u16 idx = 0;
  if(len == 0) printf("êy?Y3¤?è?a0\r\n");
  W5500_CS=0;
  IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);
  IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
  IINCHIP_SpiSendData( (addrbsb & 0x000000F8) + 4);
  for(idx = 0; idx < len; idx++)
   {
     IINCHIP_SpiSendData(buf[idx]);
   }
   W5500_CS=1;                          
   return len;   
}
/*
從指定地址讀取指定長(zhǎng)度數(shù)據(jù)
形參:addrbsb  -- 讀取的地址
	 buf  -- 讀取的數(shù)據(jù)保存地址
	 len  -- 讀取的長(zhǎng)度
返回值:讀取的數(shù)據(jù)長(zhǎng)度 
*/
u16 wiz_read_buf(u32 addrbsb, u8* buf,u16 len)
{
  u16 idx = 0;
  W5500_CS=0;
  IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);
  IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);
  IINCHIP_SpiSendData( (addrbsb & 0x000000F8)); 
  for(idx = 0; idx < len; idx++)                   
  {
    buf[idx] = IINCHIP_SpiSendData(0x00);
  }  
  W5500_CS=1;
  return len;
}
/*DHCP用到定時(shí)器初始化*/
void dhcp_timer_init(void)
{
  TIMx_Init(TIM3,72,1000);
  TIM3->CR1|=1<<0;
}
/*ntp用到定時(shí)器出事化*/
void ntp_timer_init(void)
{
  TIMx_Init(TIM3,72,1000);												
}
/*中斷處理函數(shù)*/
void timer3_isr(void)
{
  ms++;	
  if(ms>=1000)
  {  
    ms=0;
    dhcp_time++;	/*DHCP定時(shí)+1S*/
    #ifndef	__NTP_H__
	  ntptimer++;	/*NTP重試時(shí)間+1s*/
    #endif
  }  
}
/*配置W5500網(wǎng)卡信息*/
void set_w5500_ip(void)
{
  /*復(fù)制定義的配置信息到配置結(jié)構(gòu)體*/
	memcpy(ConfigMsg.mac, mac, 6);//MAC地址
  memcpy(ConfigMsg.lip,local_ip,4);//IP
  memcpy(ConfigMsg.sub,subnet,4);//子網(wǎng)掩碼
  memcpy(ConfigMsg.gw,gateway,4);//網(wǎng)關(guān)
  memcpy(ConfigMsg.dns,dns_server,4);//DNS
  
  
  if(ip_from == IP_FROM_DHCP)/*動(dòng)態(tài)獲取IP*/
  {
    if(dhcp_ok==1)/*動(dòng)態(tài)獲取IP成功*/
    {
      printf(" IP from DHCP\r\n");		 
			memcpy(ConfigMsg.lip,DHCP_GET.lip, 4);
			memcpy(ConfigMsg.sub,DHCP_GET.sub, 4);
			memcpy(ConfigMsg.gw,DHCP_GET.gw, 4);
			memcpy(ConfigMsg.dns,DHCP_GET.dns,4);
    }
  }
  
  /*將IP配置信息寫入W5500相應(yīng)寄存器*/	
	setSUBR(ConfigMsg.sub);
	setGAR(ConfigMsg.gw);
	setSIPR(ConfigMsg.lip);
  /*判斷數(shù)據(jù)是否寫入成功*/
	getSIPR (local_ip);			
	printf(" W5500 IP地址   : %d.%d.%d.%d\r\n", local_ip[0],local_ip[1],local_ip[2],local_ip[3]);
	getSUBR(subnet);
	printf(" W5500 子網(wǎng)掩碼 : %d.%d.%d.%d\r\n", subnet[0],subnet[1],subnet[2],subnet[3]);
	getGAR(gateway);
	printf(" W5500 網(wǎng)關(guān)     : %d.%d.%d.%d\r\n", gateway[0],gateway[1],gateway[2],gateway[3]);  
}
//配置W5500的MAC地址
void set_w5500_mac(void)
{
	memcpy(ConfigMsg.mac, mac, 6);
	setSHAR(ConfigMsg.mac);	
	memcpy(DHCP_GET.mac, mac, 6);
}

W5500初始化,動(dòng)態(tài)IP分配

#include "stm32f10x.h"
#include "usart.h"
#include "timer.h"
#include "w5500_config.h"
#include "socket.h"
#include "w5500.h"
#include "dhcp.h"
int main()
{
  USART1_Init(115200);
  printf("W5500 SPI模擬時(shí)序,動(dòng)態(tài)分配IP VER1.0 \r\n");
  W5500_GPIO_Init();/*w5500_GPIO初始化*/
  W5500_reset();//硬件復(fù)位w5500
  set_w5500_mac();/*配置MAC地址*/
  socket_buf_init(txsize, rxsize);		/*初始化8個(gè)Socket的發(fā)送接收緩存大小*/
  printf("網(wǎng)絡(luò)初始化完成\r\n");
  while(1)
  {
    do_dhcp();/*DHCP測(cè)試程序*/
  }
}

W5500底層寄存器配置文件w5500.c;socket編程相關(guān)函數(shù)文件socket.c、w5500延時(shí)函數(shù)、數(shù)據(jù)格式轉(zhuǎn)換文件utility.c;動(dòng)態(tài)分配IP函數(shù)接口文件dhcp.c這些文件移植可參考示例代碼或參考官方示例工程。

6.效果展示

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASVRf6Zi_5rC0,size_20,color_FFFFFF,t_70,g_se,x_16#pic_centerpoYBAGKV4mKAH1tmAAGchgToQNM793.png

審核編輯:符乾江

聲明:本文內(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)投訴
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1767

    瀏覽量

    151005
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1749

    瀏覽量

    94086
  • 動(dòng)態(tài)分配
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    9775
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    調(diào)試變頻器詳細(xì)說明

    調(diào)試變頻器是一個(gè)復(fù)雜但至關(guān)重要的過程,它涉及多個(gè)參數(shù)的設(shè)定和調(diào)整,以確保變頻器能夠正常運(yùn)行并滿足特定應(yīng)用需求。以下是對(duì)變頻器調(diào)試的詳細(xì)說明。 一、準(zhǔn)備工作 1. 選擇合適的電機(jī)功率:根據(jù)實(shí)際需求選擇
    的頭像 發(fā)表于 04-25 15:32 ?117次閱讀

    UHV系列雷電沖擊電壓發(fā)生器試驗(yàn)裝置詳細(xì)說明使用

    UHV系列 雷電沖擊電壓發(fā)生器試驗(yàn)裝置產(chǎn)品詳細(xì)說明
    發(fā)表于 02-21 17:55 ?17次下載

    ISP與IP地址池

    才能接入互聯(lián)網(wǎng),與其他設(shè)備進(jìn)行通信和數(shù)據(jù)傳輸。這是前提也是基礎(chǔ)。 ? ISP通常使用DHCP來為用戶提供IP地址的動(dòng)態(tài)分配。當(dāng)設(shè)備連接到ISP的網(wǎng)絡(luò)時(shí),DHCP服務(wù)器會(huì)自動(dòng)從IP地址池中分配
    的頭像 發(fā)表于 12-27 10:41 ?401次閱讀

    CIDR的IP地址分配與管理

    傳統(tǒng)IP地址分類,也就是ABC類等。但是,有一種情況,“如果一個(gè)公司可能被分配了一個(gè)C類網(wǎng)絡(luò)地址,但是實(shí)際上,它僅需少量的IP地址?!倍鳦IDR的出現(xiàn)解決了這類問題,它提供了一種更靈活的IP
    的頭像 發(fā)表于 12-26 10:01 ?422次閱讀

    云計(jì)算環(huán)境下的IP地址分配方式

    之前我們聊過在計(jì)算機(jī)環(huán)境下IP地址的分配方式,但在云計(jì)算環(huán)境下,IP地址的分配方式更加靈活,可以根據(jù)實(shí)際需求進(jìn)行配置,用來滿足不同企業(yè)和應(yīng)用的需求。 在云計(jì)算環(huán)境中,
    的頭像 發(fā)表于 12-19 14:02 ?388次閱讀

    深入解析:住宅靜態(tài)IP動(dòng)態(tài)IP的區(qū)別

    住宅靜態(tài)IP動(dòng)態(tài)IP是兩種不同類型的IP分配方式,它們?cè)诙鄠€(gè)方面存在顯著差異。
    的頭像 發(fā)表于 11-20 08:37 ?706次閱讀

    住宅動(dòng)態(tài)IP解析:優(yōu)勢(shì)、應(yīng)用場(chǎng)景與未來趨勢(shì)

    住宅動(dòng)態(tài)IP是指由互聯(lián)網(wǎng)服務(wù)提供商(ISP)分配給家庭用戶的、能夠隨時(shí)間自動(dòng)更換的IP地址。
    的頭像 發(fā)表于 10-21 08:07 ?520次閱讀

    安全暢游世界:動(dòng)態(tài)分配海外住宅IP,保護(hù)隱私與加速網(wǎng)絡(luò)訪問

    在數(shù)字化時(shí)代,互聯(lián)網(wǎng)已成為人們獲取信息、交流思想、開展業(yè)務(wù)的重要平臺(tái)。然而,隨著網(wǎng)絡(luò)環(huán)境的日益復(fù)雜,網(wǎng)絡(luò)安全與隱私保護(hù)問題日益凸顯。動(dòng)態(tài)分配海外住宅IP作為一種先進(jìn)的網(wǎng)絡(luò)工具,為用戶提供了在全球范圍內(nèi)安全暢游的可能性。
    的頭像 發(fā)表于 09-26 08:13 ?374次閱讀

    PLC的IP沖突如何解決(NAt物聯(lián)網(wǎng)解決方案)

    他網(wǎng)絡(luò)設(shè)備之間的通信將受到嚴(yán)重影響,可能出現(xiàn)數(shù)據(jù)丟包、通信延遲甚至通信中斷等問題。 制造商在設(shè)備出廠中會(huì)將設(shè)備IP設(shè)置為相同,在接入工廠局域網(wǎng)時(shí)便可能與網(wǎng)絡(luò)中已存在的設(shè)備IP沖突;同時(shí)動(dòng)態(tài)分配
    的頭像 發(fā)表于 09-06 10:53 ?994次閱讀
    PLC的<b class='flag-5'>IP</b>沖突如何解決(NAt物聯(lián)網(wǎng)解決方案)

    DHCP分配IP地址,助力企業(yè)優(yōu)化管理

    網(wǎng)絡(luò)管理。 首先我們先來理解一下什么是DHCP。DHCP是一種網(wǎng)絡(luò)協(xié)議,旨在動(dòng)態(tài)分配和管理網(wǎng)絡(luò)中的IP地址、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)、DNS服務(wù)器等配置信息。通過DHCP,客戶端設(shè)備,如電腦、手機(jī)、打印機(jī)等能夠自動(dòng)從DHCP服務(wù)器無
    的頭像 發(fā)表于 09-05 10:53 ?571次閱讀

    哪些關(guān)鍵點(diǎn)在使用動(dòng)態(tài)IP作為服務(wù)器地址時(shí)需要考慮?

    在考慮使用動(dòng)態(tài)IP作為服務(wù)器地址時(shí),有幾個(gè)關(guān)鍵點(diǎn)需要考量,同時(shí)也有一些實(shí)戰(zhàn)策略可以幫助優(yōu)化網(wǎng)絡(luò)性能和SEO。 一、考量因素: IP地址變化:動(dòng)態(tài)IP
    的頭像 發(fā)表于 08-23 10:58 ?402次閱讀

    【龍芯2K0300蜂鳥板試用】tinnu-02-有線網(wǎng)卡驅(qū)動(dòng)問題導(dǎo)致的SSH連接問題

    SSH2_MSG_KEX_ECDH_INIT 等待的問題,我生出一個(gè)大膽的想法: 會(huì)不會(huì)是網(wǎng)卡本身有問題? 由于一開始ping都是正常的,沒往這邊想,于是我換了路由器、掛了USB網(wǎng)卡,設(shè)置靜態(tài)IP全部試過,都不行。 又試了試
    發(fā)表于 08-11 23:57

    IP地址的分配

    公有IP地址與私有IP地址 公有IP地址:用于互聯(lián)網(wǎng)上的全球唯一地址,由互聯(lián)網(wǎng)號(hào)碼分配機(jī)構(gòu)(IANA)和區(qū)域互聯(lián)網(wǎng)注冊(cè)機(jī)構(gòu)(RIR)分配。比
    的頭像 發(fā)表于 08-09 14:55 ?1626次閱讀

    ESP32的VOIP例程如何從WIFI移植到ETH有線網(wǎng)口?

    您好,我現(xiàn)在有個(gè)項(xiàng)目,需要在ESP32 的有線網(wǎng)口上面,實(shí)現(xiàn)VOIP的語音通信,MQTT的通信;現(xiàn)在您的例程是通過WIFI 無線傳輸實(shí)現(xiàn)的。VOIP的例程中,怎么沒有看到wifi接收的數(shù)據(jù)流送給
    發(fā)表于 06-28 07:59

    有線網(wǎng)卡和無線網(wǎng)卡分別指的是什么

    有線網(wǎng)卡和無線網(wǎng)卡是計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備中用于連接網(wǎng)絡(luò)的兩種不同類型的網(wǎng)絡(luò)接口卡。它們的主要區(qū)別在于傳輸媒介和連接方式。
    的頭像 發(fā)表于 05-28 15:28 ?5325次閱讀