久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6136|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

w5500 dhcp優(yōu)化版+udp nrf52832程序源碼 M4內(nèi)核芯片

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:326061 發(fā)表于 2019-1-8 11:09 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用官網(wǎng)W5500庫版本的DHCP例子 申請10次會有5次 獲取不到IP 卡在了discover步驟,
經(jīng)過優(yōu)化,現(xiàn)在自測了50多遍,100%可以申請到IP。

主控用的nrf52832 cortex m4內(nèi)核 硬件spi   
SDK為nRF_SDK_15.2.0
把解壓后的目錄放nRF_SDK_15.2.0\examples\ble_central下編譯就可以成功。

代碼預(yù)覽
  1. #include "ethernet.h"
  2. #include "dhcp.h"

  3. /* Private typedef -----------------------------------------------------------*/
  4. /* Private define ------------------------------------------------------------*/
  5. #define SOCK_TCPS        0

  6. /* Private macro -------------------------------------------------------------*/
  7. uint8_t gSEND_BUFF[SEND_BUFF_SIZE];
  8. // Default Network Configuration
  9. wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x02, 0x04,0x06, 0x08, 0x10},
  10.                             .ip = {192,168,1,2 },
  11.                             .sn = {255,255,2555,0},
  12.                             .gw = {0, 0, 0, 0},
  13.                             .dns = {1,2,4,8},
  14.                             .dhcp =  NETINFO_DHCP };
  15. void network_init(void);
  16.                            
  17. void set_macaddr(void)
  18. {
  19.     gWIZNETINFO.mac[0] = (uint8_t )(NRF_FICR->DEVICEADDR[0]);
  20.     gWIZNETINFO.mac[1] = (uint8_t )(NRF_FICR->DEVICEADDR[0]>>8);
  21.     gWIZNETINFO.mac[2] = (uint8_t )(NRF_FICR->DEVICEADDR[0]>>16);
  22.     gWIZNETINFO.mac[3] = (uint8_t )(NRF_FICR->DEVICEADDR[0]>>24);
  23.     gWIZNETINFO.mac[4] = (uint8_t )(NRF_FICR->DEVICEADDR[1]);
  24.     gWIZNETINFO.mac[5] = (uint8_t )(NRF_FICR->DEVICEADDR[1]>>8);
  25. }

  26. uint8_t DHCP_message[128];

  27. void ethernet_init(void)
  28. {
  29.     uint8_t tmp;
  30.         
  31.         uint8_t memsize[2][8] = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}};
  32.         
  33.    
  34.     SPI_Configuration();
  35.    
  36.     memset((char *)gSEND_BUFF,0,SEND_BUFF_SIZE);   
  37.         
  38.     reg_wizchip_cris_cbfunc(SPI_CrisEnter, SPI_CrisExit);        //注冊臨界區(qū)函數(shù)
  39.         /* Chip selection call back */
  40. #if   _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
  41.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);//注冊SPI片選信號函數(shù)
  42. #elif _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_FDM_
  43.         reg_wizchip_cs_cbfunc(SPI_CS_Select, SPI_CS_Deselect);  // CS must be tried with LOW.
  44. #else
  45.    #if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SIP_) != _WIZCHIP_IO_MODE_SIP_
  46.       #error "Unknown _WIZCHIP_IO_MODE_"
  47.    #else
  48.       reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
  49.    #endif
  50. #endif
  51.         /* SPI Read & Write callback function */
  52.         reg_wizchip_spi_cbfunc(SPI_ReadByte, SPI_WriteByte);        //注冊讀寫函數(shù)

  53.         /* WIZCHIP SOCKET Buffer initialize */
  54.         if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1){
  55.                
  56.                  while(1)
  57.          {
  58.              NRF_LOG_DEBUG("WIZCHIP Initialized fail.\r\n");
  59.              nrf_delay_ms(500);   
  60.          }
  61.         }
  62.     NRF_LOG_DEBUG("WIZCHIP Initialized Successful.\r\n");
  63.         /* PHY link status check */
  64.         do{
  65.                  if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1)
  66.          {
  67.                                 NRF_LOG_DEBUG("Unknown PHY Link stauts.\r\n");
  68.             
  69.                  }
  70.         
  71.         }while(tmp == PHY_LINK_OFF);
  72.     NRF_LOG_DEBUG("phy running.\n");
  73.    
  74.     set_macaddr();
  75.    
  76.     memset(DHCP_message,0,128);
  77.     DHCP_init(0,DHCP_message);
  78.    
  79.         /* Network initialization */
  80.         network_init();
  81.    
  82.    
  83. }   
  84. void show_netinfo(void);

  85. void ethernet_handle(void)
  86. {
  87.      uint8_t dhcp_res;
  88.      dhcp_res = DHCP_run();
  89.      if(dhcp_res != DHCP_IP_LEASED)
  90.      {
  91.          NRF_LOG_INFO("DHCP_run... 返回值:%d\n",dhcp_res);
  92.          nrf_delay_ms(1000);
  93.          return;
  94.      }
  95.      
  96.      static uint8_t temp = 0;
  97.      if(temp == 0)
  98.      {
  99.         NRF_LOG_INFO("DHCP成功申請到IP地址\n");
  100.         show_netinfo();
  101.         temp = 1;
  102.      }
  103.      switch(getSn_SR(0))                                                                                                                                                                                
  104.      {
  105.         case SOCK_UDP:                                                                                                                                                                                       
  106.                
  107.                 if(getSn_IR(0) & Sn_IR_RECV)
  108.                 {
  109.                     setSn_IR(0, Sn_IR_RECV);                                                                                                                        
  110.                 }
  111. #if 0               
  112.                 if((ret=getSn_RX_RSR(0))>0)
  113.                 {
  114.                     memset(gDATABUF,0,ret+1);
  115.                     recvfrom(0,gDATABUF, ret, DstIP,&DstPort);                        
  116.                     NRF_LOG_DEBUG("%s\r\n",gDATABUF);                                                                                                               
  117.                     sendto(0,gDATABUF,ret, DstIP, DstPort);                                 
  118.                 }
  119. #endif                 
  120.         break;
  121.         case SOCK_CLOSED:                                                                                                                                                                                // Socket處于關(guān)閉狀態(tài)
  122.                 socket(0,Sn_MR_UDP,UDP_LOCAL_PORT,0x00);                                                                                                // 打開Socket0,并配置為UDP模式,打開一個本地端口
  123.         break;
  124.     }

  125.    
  126. }

  127. void show_netinfo(void)
  128. {
  129.     uint8_t tmpstr[6];
  130.         ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);

  131.         // Display Network Information
  132.         ctlwizchip(CW_GET_ID,(void*)tmpstr);
  133.         NRF_LOG_INFO("=== %s NET CONF ===\r\n",(char*)tmpstr);
  134.         NRF_LOG_INFO("MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
  135.     gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
  136.         NRF_LOG_INFO("SIP: %d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
  137.         NRF_LOG_INFO("GAR: %d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
  138.         NRF_LOG_INFO("SUB: %d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
  139.         NRF_LOG_INFO("DNS: %d.%d.%d.%d\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
  140.         NRF_LOG_INFO("======================\r\n");
  141. }

  142. void network_init(void)
  143. {
  144.         ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);

  145. }
復(fù)制代碼

SDK為nRF_SDK_15.2.0
把解壓后的目錄放nRF_SDK_15.2.0\examples\ble_central下編譯就可以成功。

iar的工程(沒裝iar的鞋童就不要下載了):
w5500_dhcp_udp.7z (342.93 KB, 下載次數(shù): 82)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:607934 發(fā)表于 2019-9-5 14:16 | 只看該作者
不錯,很實用。謝謝
回復(fù)

使用道具 舉報

板凳
ID:607934 發(fā)表于 2019-9-5 14:16 | 只看該作者
很好的資料。
回復(fù)

使用道具 舉報

地板
ID:384489 發(fā)表于 2021-3-5 11:05 | 只看該作者
正在學(xué)習(xí)nRF52832,謝謝分享。
回復(fù)

使用道具 舉報

5#
ID:136019 發(fā)表于 2021-12-15 11:42 | 只看該作者
樓主 不能編譯呀
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品日韩欧美一区二区三区 | 欧美一区二区三区在线免费观看 | 在线成人精品视频 | 国产午夜影院 | 天天看天天爽 | 亚洲欧美日韩一区 | 狠狠干av | 麻豆一区一区三区四区 | 日日av| 欧美一级在线观看 | 特级毛片www | 欧美激情欧美激情在线五月 | www.日韩系列 | 欧美视频区 | 91成人在线视频 | 欧美乱码精品一区二区三区 | 免费观看黄网站 | 国产精品看片 | 国产精品成av人在线视午夜片 | 国产黄色在线观看 | 91在线视频免费观看 | 亚洲国产一区二区三区 | 亚洲高清在线观看 | 欧美一区视频 | 色噜噜狠狠色综合中国 | 91美女视频 | 91亚洲国产精品 | 久久网日本 | 亚洲精品视频一区 | 午夜激情影院 | 欧美久久一级特黄毛片 | 国产91久久精品一区二区 | 亚洲精品一区在线 | av免费在线播放 | 国产精品99久久久久久久vr | 欧美精品在线看 | 国精日本亚洲欧州国产中文久久 | 在线播放91| 欧美 日韩 综合 | 91成人午夜性a一级毛片 | 精品亚洲一区二区三区 |