真心朋友的個(gè)人空間 http://selenalain.com/space-uid-99298.html [收藏] [復制] [RSS]

博客

STM32開(kāi)發(fā)板+W5100以太網(wǎng)模塊示例比ENC28J60更好

已有 3343 次閱讀2013-9-6 08:34 | STM32, W5100, 以太網(wǎng), 網(wǎng)絡(luò ), 開(kāi)發(fā)板

w5100模塊,學(xué)習了一下。這個(gè)芯片真的不錯,集成了硬件tcp/ip協(xié)議棧。操作很簡(jiǎn)單,主要是通過(guò)spi接口(當然也支持并口總線(xiàn)操作)配置網(wǎng)絡(luò )的相關(guān)ip 掩碼 物理地址 之類(lèi)的值。
     參數配置好后,就是讀寫(xiě)通訊的內容,w5100有個(gè)中斷引腳來(lái)指示通訊的完成,我們通過(guò)在中斷到來(lái)之后讀取狀態(tài)值,就會(huì )知道是那個(gè)端口的中斷,以此來(lái)進(jìn)行相關(guān)數據解析。
     w5100初始化程序:
   Write_W5100(W5100_MODE,MODE_RST);  /*軟復位W5100*/
Delay(100);      /*延時(shí)100ms,自己定義該函數*/
/*設置網(wǎng)關(guān)(Gateway)的IP地址,4字節 */
/*使用網(wǎng)關(guān)可以使通信突破子網(wǎng)的局限,通過(guò)網(wǎng)關(guān)可以訪(fǎng)問(wèn)到其它子網(wǎng)或進(jìn)入Internet*/
for(i=0;i<4;i++)
  Write_W5100(W5100_GAR+i,Gateway_IP);   /*Gateway_IP為4字節unsigned char數組,自己定義*/
/*設置子網(wǎng)掩碼(MASK)值,4字節。子網(wǎng)掩碼用于子網(wǎng)運算*/
for(i=0;i<4;i++)
  Write_W5100(W5100_SUBR+i,Sub_Mask);   /*SUB_MASK為4字節unsigned char數組,自己定義*/
/*設置物理地址,6字節,用于唯一標識網(wǎng)絡(luò )設備的物理地址值
該地址值需要到IEEE申請,按照OUI的規定,前3個(gè)字節為廠(chǎng)商代碼,后三個(gè)字節為產(chǎn)品序號
如果自己定義物理地址,注意第一個(gè)字節必須為偶數*/
for(i=0;i<6;i++)
  Write_W5100(W5100_SHAR+i,Phy_Addr);   /*PHY_ADDR6字節unsigned char數組,自己定義*/
/*設置本機的IP地址,4個(gè)字節
注意,網(wǎng)關(guān)IP必須與本機IP屬于同一個(gè)子網(wǎng),否則本機將無(wú)法找到網(wǎng)關(guān)*/
for(i=0;i<4;i++)
  Write_W5100(W5100_SIPR+i,IP_Addr);   /*IP_ADDR為4字節unsigned char數組,自己定義*/
/*設置發(fā)送緩沖區和接收緩沖區的大小,參考W5100數據手冊*/
Write_W5100(W5100_RMSR,0x55);  /*Socket Rx memory size=2k*/
Write_W5100(W5100_TMSR,0x55);  /*Socket Tx mempry size=2k*/
/* 設置重試時(shí)間,默認為2000(200ms) */
Write_W5100(W5100_RTR,0x07);
Write_W5100(W5100_RTR+1,0xd0);
/* 設置重試次數,默認為8次 */
Write_W5100(W5100_RCR,8);
/* 啟動(dòng)中斷,參考W5100數據手冊確定自己需要的中斷類(lèi)型
IMR_CONFLICT是IP地址沖突異常中斷
IMR_UNREACH是UDP通信時(shí),地址無(wú)法到達的異常中斷
其它是Socket事件中斷,根據需要添加 */
Write_W5100(W5100_IMR,(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT|IMR_S1_INT|IMR_S2_INT|IMR_S3_INT));
主程序:
  do
{
  /* 設置W5100端口 */
  W5100_Socket_Set();
                Socket_Listen(0);
  /* 處理W5100中斷 */
  if(W5100_Interrupt)
   W5100_Interrupt_Process();
  /* 如果Socket0接收到數據 */
  if((S0_Data & S_RECEIVE) == S_RECEIVE)
  {   GPIO_SetBits(GPIOB, LED_DRIVE);
   S0_Data&=~S_RECEIVE;
   Process_Socket_Data(0);
  }
  /* 如果Socket1接收到數據 */
  if((S1_Data & S_RECEIVE) == S_RECEIVE)
  {      GPIO_SetBits(GPIOB, LED_DRIVE);
   S1_Data&=~S_RECEIVE;
   Process_Socket_Data(1);
  }
  /* 如果Socket2接收到數據 */
  if((S2_Data & S_RECEIVE) == S_RECEIVE)
  {    GPIO_SetBits(GPIOB, LED_DRIVE);
   S2_Data&=~S_RECEIVE;
   Process_Socket_Data(2);
  }
  /* 如果Socket3接收到數據 */
  if((S3_Data & S_RECEIVE) == S_RECEIVE)
  {      GPIO_SetBits(GPIOB, LED_DRIVE);
   S3_Data&=~S_RECEIVE;
   Process_Socket_Data(3);

W5100模塊圖片(旺旺:fan2012918)

STM32103(旺旺:fan2012918)


(旺旺:fan2012918)
資料下載:[attach]123088[/attach][attach]123089[/attach]

評論 (0 個(gè)評論)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页