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

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

    文章

    1862

    瀏覽量

    155829
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1885

    瀏覽量

    101225
  • 動態分配
    +關注

    關注

    0

    文章

    5

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    keil中c語言的動態分配內存

    于處理器的指令集中,效率很高,但是分配的內存容量有限。另外,當函數運行結束時,棧區的空間會被自動釋放。 (3)內存映射段。該部分內存主要用于文件映射、動態庫以及匿名映射。 (4)堆區。動態內存
    發表于 01-21 06:04

    嵌入式系統中,動態分配內存可能發生的問題是什么?

    盡管不像非嵌入式計算機那么常見,嵌入式系統還是有從堆(heap)中動態分配內存的過程的。 那么嵌入式系統中,動態分配內存可能發生的問題是什么? 這 里,我期望應試者能提到內存碎片,碎片收集
    發表于 12-22 09:42

    RTL8812構成的無線網卡原理圖誰有呀

    本人是名在校大學生最近正在研究8812au的無線網卡,從網上購買了一個8812au的無線卡使用后發現信號接收功能情況不佳,想嘗試自己加裝天線或者修改電路但是苦于這個板子已經是成品了不能再修改,所以想
    發表于 10-30 20:03

    USB 擴展網卡全方位指南:從選購到使用

    在無線網絡普及的當下,有線網絡憑借更穩定的傳輸速率和更低的延遲,仍是游戲、直播、大型文件傳輸等場景的首選。而USB擴展網卡(又稱USB千兆網卡、USB轉以太網適配器),則成為解決設備缺
    的頭像 發表于 10-24 15:37 ?1410次閱讀
    USB 擴展<b class='flag-5'>網卡</b>全方位指南:從選購到使用

    工業路由器支持哪些有線網

    接口連接有線網絡,提供高速穩定的數據傳輸。 應用場景 :工廠自動化、智能交通、能源監控等需要高帶寬和可靠連接的場景。 TCP/IP協議棧 TCP(傳輸控制協議) :確保數據可靠傳輸,適用于對準確性要求高的場景(如工業控制系統)。 IP
    的頭像 發表于 10-23 09:47 ?481次閱讀

    V2G+動態分配:安科瑞有序充電方案如何實現電網、運營商、用戶三贏?

    分析國內外有序充電技術發展現狀,設計了包含邊緣計算網關、智能排隊算法和功率動態分配策略的有序充電管控終端架構,并詳細闡述了其工作原理和實現方法。系統采用分層控制策略,實現臺區內充電負荷與供電能力的自動平衡。實
    的頭像 發表于 08-15 16:55 ?1834次閱讀
    V2G+<b class='flag-5'>動態分配</b>:安科瑞有序充電方案如何實現電網、運營商、用戶三贏?

    IP防護等級說明

    IP防護等級說明
    發表于 06-24 16:55 ?2次下載

    單片機實例項目:DM9000有線以太網卡開發資料

    單片機實例項目:DM9000有線以太網卡開發資料,推薦下載!
    發表于 06-03 20:55

    貼片三極管上的印字與真實名稱的對照表詳細說明

      本文檔的主要內容詳細介紹的是貼片三極管上的印字與真實名稱的對照表詳細說明
    發表于 05-28 09:05 ?110次下載

    動態IP技術演進:從網絡基石到智能連接時代的創新引擎

    在萬物互聯的智能時代,IP地址早已突破"網絡身份證"的單一屬性,成為支撐數字化變革的核心基礎設施。動態IP技術作為網絡資源分配的底層邏輯,正經歷著從工具性功能向智能化服務的深刻轉型。本
    的頭像 發表于 05-20 16:16 ?691次閱讀

    瑞芯微rv1106開發資料 rv1106數據手冊 rv1106詳細說明書免費下載

    瑞芯微rv1106開發資料 rv1106數據手冊 rv1106詳細說明書免費下載
    的頭像 發表于 05-19 11:16 ?6100次閱讀
    瑞芯微rv1106開發資料 rv1106數據手冊 rv1106<b class='flag-5'>詳細說明</b>書免費下載

    IP6825引腳詳細說明與使用技巧

    英集芯IP6825是一款5W無線充電發射端控制SoC芯片,采用QFN-16-EP封裝,有16個引腳。芯片內集成全橋驅動電路、功率MOS管和電壓/電流雙路ASK通信解調模塊,降低外圍電路復雜度。
    的頭像 發表于 05-18 09:02 ?982次閱讀
    <b class='flag-5'>IP</b>6825引腳<b class='flag-5'>詳細說明</b>與使用技巧

    動態IP時代下設備的技術適配與安全進化

    在萬物互聯的數字浪潮中,IP地址作為網絡世界的"門牌號",其分配方式正經歷深刻變革。動態IP技術憑借資源利用率高、管理成本低等優勢,已成為家庭寬帶、物聯網設備的主流配置方案。然而
    的頭像 發表于 05-11 09:59 ?584次閱讀

    調試變頻器詳細說明

    調試變頻器是一個復雜但至關重要的過程,它涉及多個參數的設定和調整,以確保變頻器能夠正常運行并滿足特定應用需求。以下是對變頻器調試的詳細說明。 一、準備工作 1. 選擇合適的電機功率:根據實際需求選擇
    的頭像 發表于 04-25 15:32 ?2051次閱讀

    編碼器常見的故障詳細說明

    運行和加工精度。本文將詳細說明編碼器常見的故障及其排除方法,以幫助用戶更好地維護和使用編碼器。 一、信號輸出故障 1. 無信號輸出:編碼器無法產生信號,上位機或控制系統接收不到任何數據,導致設備無法正常運行。這可能
    的頭像 發表于 04-16 18:28 ?4047次閱讀