色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

有線網卡驅動和動態分配IP的詳細說明

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

1.W5500簡介

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

2.W5500特性

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

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

3.應用場合

  • 家庭網絡設備: 機頂盒、個人錄像機、數碼媒體適配器
  • 串行轉以太網: 門禁控制、 LED 顯示屏、無線 AP 繼電器等
  • 并行轉以太網: POS/微型打印機、復印機
  • USB 轉以太網: 存儲設備、網絡打印機
  • GPIO 轉以太網: 家庭網絡傳感器
  • 安全系統: 數字錄像機、網絡攝像機、信息
  • 工廠和樓宇自動化控制系統
  • 醫療監測設備
  • 嵌入式服務器

W5500模塊圖

poYBAGKV4YCAPQeYAAXS4rkfy70626.png

4.接線方式

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

5.SPI底層驅動編寫

CONFIG_MSG  ConfigMsg;																	/*配置結構體*/
/*定義MAC地址,如果多塊W5500網絡適配板在同一現場工作,請使用不同的MAC地址*/
uint8 mac[6]={0x00,0x08,0xdc,0x11,0x11,0x11};

/*定義默認IP信息*/
uint8 local_ip[4]  ={192,168,1,88};											/*定義W5500默認IP地址*/
uint8 subnet[4]    ={255,255,255,0};										/*定義W5500默認子網掩碼*/
uint8 gateway[4]   ={192,168,1,1};											/*定義W5500默認網關*/
uint8 dns_server[4]={114,114,114,114};									/*定義W5500默認DNS*/

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

/*定義遠端IP信息*/
uint8  remote_ip[4]={192,168,1,102};										/*遠端IP地址*/
uint16 remote_port=5000;																/*遠端端口號*/

/*IP配置方法選擇,請自行選擇*/
uint8	ip_from=IP_FROM_DHCP;				

uint8   dhcp_ok   = 0;																	/*dhcp成功獲取IP*/
uint32	ms        = 0;																	/*毫秒計數*/
uint32	dhcp_time = 0;																	/*DHCP運行計數*/
vu8	    ntptimer  = 0;																	/*NPT秒計數*/
/*硬件配置*/
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;
}
/*模塊復位*/
void W5500_reset(void)
{
  W5500_RST=0;
  Delay_Us(2);
  W5500_RST=1;
  Delay_Ms(1000);
  Delay_Ms(600);
}
/*SPI讀寫一個字節*/
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底層收發一個字節*/
static u8 IINCHIP_SpiSendData(u8 dat)
{
   return(SPI_WR_Byte(dat));
}
/*向指定地址寫入一字節數據*/
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;
}
/*從地址讀取讀取一字節數據*/
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指定地址寫入指定長度數據
形參:addrbsb  -- 寫入的地址
	 buf  -- 要寫入的數據
	 len  -- 寫入的長度
返回值:寫入的數據長度
*/
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;   
}
/*
從指定地址讀取指定長度數據
形參:addrbsb  -- 讀取的地址
	 buf  -- 讀取的數據保存地址
	 len  -- 讀取的長度
返回值:讀取的數據長度 
*/
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用到定時器初始化*/
void dhcp_timer_init(void)
{
  TIMx_Init(TIM3,72,1000);
  TIM3->CR1|=1<<0;
}
/*ntp用到定時器出事化*/
void ntp_timer_init(void)
{
  TIMx_Init(TIM3,72,1000);												
}
/*中斷處理函數*/
void timer3_isr(void)
{
  ms++;	
  if(ms>=1000)
  {  
    ms=0;
    dhcp_time++;	/*DHCP定時+1S*/
    #ifndef	__NTP_H__
	  ntptimer++;	/*NTP重試時間+1s*/
    #endif
  }  
}
/*配置W5500網卡信息*/
void set_w5500_ip(void)
{
  /*復制定義的配置信息到配置結構體*/
	memcpy(ConfigMsg.mac, mac, 6);//MAC地址
  memcpy(ConfigMsg.lip,local_ip,4);//IP
  memcpy(ConfigMsg.sub,subnet,4);//子網掩碼
  memcpy(ConfigMsg.gw,gateway,4);//網關
  memcpy(ConfigMsg.dns,dns_server,4);//DNS
  
  
  if(ip_from == IP_FROM_DHCP)/*動態獲取IP*/
  {
    if(dhcp_ok==1)/*動態獲取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相應寄存器*/	
	setSUBR(ConfigMsg.sub);
	setGAR(ConfigMsg.gw);
	setSIPR(ConfigMsg.lip);
  /*判斷數據是否寫入成功*/
	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 子網掩碼 : %d.%d.%d.%d\r\n", subnet[0],subnet[1],subnet[2],subnet[3]);
	getGAR(gateway);
	printf(" W5500 網關     : %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初始化,動態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模擬時序,動態分配IP VER1.0 \r\n");
  W5500_GPIO_Init();/*w5500_GPIO初始化*/
  W5500_reset();//硬件復位w5500
  set_w5500_mac();/*配置MAC地址*/
  socket_buf_init(txsize, rxsize);		/*初始化8個Socket的發送接收緩存大小*/
  printf("網絡初始化完成\r\n");
  while(1)
  {
    do_dhcp();/*DHCP測試程序*/
  }
}

W5500底層寄存器配置文件w5500.c;socket編程相關函數文件socket.c、w5500延時函數、數據格式轉換文件utility.c;動態分配IP函數接口文件dhcp.c這些文件移植可參考示例代碼或參考官方示例工程。

6.效果展示

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

審核編輯:符乾江

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

    關注

    5

    文章

    1701

    瀏覽量

    149503
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1706

    瀏覽量

    91502
  • 動態分配
    +關注

    關注

    0

    文章

    5

    瀏覽量

    9730
收藏 人收藏

    評論

    相關推薦

    云計算環境下的IP地址分配方式

    之前我們聊過在計算機環境下IP地址的分配方式,但在云計算環境下,IP地址的分配方式更加靈活,可以根據實際需求進行配置,用來滿足不同企業和應用的需求。 在云計算環境中,
    的頭像 發表于 12-19 14:02 ?95次閱讀

    深入解析:住宅靜態IP動態IP的區別

    住宅靜態IP動態IP是兩種不同類型的IP分配方式,它們在多個方面存在顯著差異。
    的頭像 發表于 11-20 08:37 ?230次閱讀

    住宅動態IP解析:優勢、應用場景與未來趨勢

    住宅動態IP是指由互聯網服務提供商(ISP)分配給家庭用戶的、能夠隨時間自動更換的IP地址。
    的頭像 發表于 10-21 08:07 ?197次閱讀

    安全暢游世界:動態分配海外住宅IP,保護隱私與加速網絡訪問

    在數字化時代,互聯網已成為人們獲取信息、交流思想、開展業務的重要平臺。然而,隨著網絡環境的日益復雜,網絡安全與隱私保護問題日益凸顯。動態分配海外住宅IP作為一種先進的網絡工具,為用戶提供了在全球范圍內安全暢游的可能性。
    的頭像 發表于 09-26 08:13 ?227次閱讀

    PLC的IP沖突如何解決(NAt物聯網解決方案)

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

    DHCP分配IP地址,助力企業優化管理

    網絡管理。 首先我們先來理解一下什么是DHCP。DHCP是一種網絡協議,旨在動態分配和管理網絡中的IP地址、子網掩碼、默認網關、DNS服務器等配置信息。通過DHCP,客戶端設備,如電腦、手機、打印機等能夠自動從DHCP服務器無
    的頭像 發表于 09-05 10:53 ?345次閱讀

    【龍芯2K0300蜂鳥板試用】tinnu-02-有線網卡驅動問題導致的SSH連接問題

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

    IP地址的分配

    公有IP地址與私有IP地址 公有IP地址:用于互聯網上的全球唯一地址,由互聯網號碼分配機構(IANA)和區域互聯網注冊機構(RIR)分配。比
    的頭像 發表于 08-09 14:55 ?750次閱讀

    ESP32的VOIP例程如何從WIFI移植到ETH有線網口?

    您好,我現在有個項目,需要在ESP32 的有線網口上面,實現VOIP的語音通信,MQTT的通信;現在您的例程是通過WIFI 無線傳輸實現的。VOIP的例程中,怎么沒有看到wifi接收的數據流送給
    發表于 06-28 07:59

    有線網卡和無線網卡分別指的是什么

    有線網卡和無線網卡是計算機或網絡設備中用于連接網絡的兩種不同類型的網絡接口卡。它們的主要區別在于傳輸媒介和連接方式。
    的頭像 發表于 05-28 15:28 ?3563次閱讀

    3KW工業變頻器電路設計方案詳細說明

    3KW工業變頻器電路設計方案詳細說明
    的頭像 發表于 03-19 08:33 ?927次閱讀
    3KW工業變頻器電路設計方案<b class='flag-5'>詳細說明</b>

    Intel近日發布新版Wi-Fi 7無線網卡驅動 依然和AMD系統不對付

    Intel近日發布了新版Wi-Fi 7無線網卡驅動,增加新功能,修復已知Bug,但遺憾的是,依然和AMD系統不對付。
    的頭像 發表于 03-04 15:29 ?1042次閱讀

    linux怎么查看網卡的收光功率?

    網卡信息: ifconfig命令可以顯示網卡的配置信息,包括網卡名稱、IP地址、MAC地址等。在終端中輸入以下命令來查看網卡信息: ```
    的頭像 發表于 01-31 14:24 ?3584次閱讀

    線網卡驅動怎么安裝 無線網卡怎么連接臺式電腦

    如今,隨著科技的不斷發展,無線網絡已經成為了我們生活中不可或缺的一部分。對于臺式電腦用戶而言,如果沒有內置無線網卡,就需要通過安裝外置無線網卡來連接無線網絡。本文將
    的頭像 發表于 01-19 09:54 ?3285次閱讀

    網卡硬件故障及解決方法

    詳細闡述每種問題的原因和解決步驟。 一、網卡無法連接到網絡 1. 問題描述:計算機上的網卡無法與網絡通信,無法上網。 2. 可能原因: (1) 物理連接故障:網線插口壞了、網線質量差、電纜損壞等。 (2)
    的頭像 發表于 12-27 15:17 ?3489次閱讀
    主站蜘蛛池模板: 开心片色99xxxx| 一品道门在线视频| 男人扒开添女人下部口述| 国产在线精品国自产拍影院午夜| 白人大战34厘米黑人BD| aaa在线观看视频高清视频| 最新 国产 精品 精品 视频| 亚洲区视频在线观看| 亚洲AV精品无码国产一区| 日日干日日操日日射| 青青草伊人网| 亚欧免费观看在线观看更新| 色偷偷成人网免费视频男人的天堂| 免费果冻传媒2021在线观看| 狼人射综合| 免费毛片视频网站| 免费韩国伦理2017最新| 久久99热成人精品国产| 国产免费人视频在线观看免费| 高h gl肉文| 国产精品爽爽久久久久久无码| 扒开双腿疯进出爽爽爽动态图| bl(高h)文| 东北女人奶大毛多水多| 大香伊人久久| 国产午夜精品美女免费大片| 国产乱码精品AAAAAAAA| 久久亚洲精品专区蓝色区 | 亚洲午夜电影| 伊人久久亚洲综合天堂| 9988电影网| 国产精品日韩欧美一区二区三区| 国产午夜精品久久理论片| 久久精麻豆亚洲AV国产品| 欧美 亚洲 另类 综合网| 午夜A级理论片左线播放 | 国内精品久久| 美女激清床上戏大全| 日韩精品一区二区中文| 亚洲欧美日韩一级特黄在线| 1区2区3区4区产品不卡码网站|