当前位置: 首页 > article >正文

【笔记】w5500 官方DHCP库 使用

官方版本 V4.0.0

无需改动

心得

1.适配其中的 时基函数

/** @brief DHCP 1s Tick Timer handler* @note SHOULD BE register to your system 1s Tick timer handler */
void DHCP_time_handler(void);

看情况,定时器,系统节拍中 都可以。实现 1s 调用一次该函数就可以

2. 创建消息缓冲区

目的为了接收解析udp消息使用。
是接收以下数据使用

.c

/** @brief DHCP message format*/ 
typedef struct {uint8_t  op;            ///< @ref DHCP_BOOTREQUEST or @ref DHCP_BOOTREPLYuint8_t  htype;         ///< @ref DHCP_HTYPE10MB or @ref DHCP_HTYPE100MBuint8_t  hlen;          ///< @ref DHCP_HLENETHERNETuint8_t  hops;          ///< @ref DHCP_HOPSuint32_t xid;           ///< @ref DHCP_XID  This increase one every DHCP transaction.uint16_t secs;          ///< @ref DHCP_SECSuint16_t flags;         ///< @ref DHCP_FLAGSBROADCAST or @ref DHCP_FLAGSUNICASTuint8_t  ciaddr[4];     ///< @ref Request IP to DHCP severuint8_t  yiaddr[4];     ///< @ref Offered IP from DHCP serveruint8_t  siaddr[4];     ///< No use uint8_t  giaddr[4];     ///< No useuint8_t  chaddr[16];    ///< DHCP client 6bytes MAC address. Others is filled to zerouint8_t  sname[64];     ///< No useuint8_t  file[128];     ///< No useuint8_t  OPT[OPT_SIZE]; ///< Option
} RIP_MSG;

我们创建缓冲区的大小 : 在 .c 98 行有定义 这个结构体的空间大小

#define OPT_SIZE                 312               /// Max OPT size of @ref RIP_MSG
#define RIP_MSG_SIZE             (236+OPT_SIZE)    /// Max size of @ref RIP_MSG

所以 236+312 = 548; 感觉这个宏应该放在 .h 文件里,比较方便。就这样用吧,不改动了

创建的时候 最好动态 申请内存。 因为只有dhcp时候 用一下。(别浪费ram,ram量大无所谓)

缓冲区地址将会被这个函数使用,可以看到 转成 结构体类型了。所以空间大小要对称

void DHCP_init(uint8_t s, uint8_t * buf)
{uint8_t zeroip[4] = {0,0,0,0};getSHAR(DHCP_CHADDR);if((DHCP_CHADDR[0] | DHCP_CHADDR[1]  | DHCP_CHADDR[2] | DHCP_CHADDR[3] | DHCP_CHADDR[4] | DHCP_CHADDR[5]) == 0x00){// assigning temporary mac address, you should be set SHAR before call this function. DHCP_CHADDR[0] = 0x00;DHCP_CHADDR[1] = 0x08;DHCP_CHADDR[2] = 0xdc;      DHCP_CHADDR[3] = 0x00;DHCP_CHADDR[4] = 0x00;DHCP_CHADDR[5] = 0x00; setSHAR(DHCP_CHADDR);     }DHCP_SOCKET = s; // SOCK_DHCPpDHCPMSG = (RIP_MSG*)buf;DHCP_XID = 0x12345678;{DHCP_XID += DHCP_CHADDR[3];DHCP_XID += DHCP_CHADDR[4];DHCP_XID += DHCP_CHADDR[5];DHCP_XID += (DHCP_CHADDR[3] ^ DHCP_CHADDR[4] ^ DHCP_CHADDR[5]);}// WIZchip Netinfo ClearsetSIPR(zeroip);setGAR(zeroip);reset_DHCP_timeout();dhcp_state = STATE_DHCP_INIT;
}

其他问题

看到很多修改回调函数的 ip_assign,ip_update,ip_conflict 这几个。
其实不需要更改,.c里有默认的实现函数。
注册时候 直接 填空,就会使用默认函数。

reg_dhcp_cbfunc(NULL,NULL,NULL);

实际操作

设备上电 基础的操作。

  w5500_hard_reset();// 硬件复位w5500_interface_init();//我自己的函数  注册wizchip_conf 的操作函数

缓冲区默认

wizchip_init(NULL, NULL) 

1.PHY

好像可以自动 感兴趣可以试试

 // phy initphyconf.by = PHY_CONFBY_SW;phyconf.mode = PHY_MODE_MANUAL;phyconf.speed = PHY_SPEED_100;phyconf.duplex = PHY_DUPLEX_FULL;wizphy_setphyconf(&phyconf);

2.mac要设置

dhcp就是根据mac分配的
如果局域网内单台设备 不设置也行,有默认设置

setSHAR(netconf.mac);

3.初始化DHCP 注册函数

DHCP_init(1,DHCP_buf);
reg_dhcp_cbfunc(NULL,NULL,NULL);// 使用默认回调函数

4.动态申请DHCP

 dhcp_ret = DHCP_run();//重点是DHCP_run(),该函数实现动态申请IP的功能while(dhcp_ret != DHCP_IP_LEASED)//返回DHCP_IP_LEASED说明申请租赁IP地址成功,如果没成功,重新申请{HAL_Delay(1000);dhcp_ret = DHCP_run();printf(".");}

5.成功打印

在这里插入图片描述
可以PING通

http://www.lryc.cn/news/2416907.html

相关文章:

  • c语言钩子函数
  • 无忧启动源码 仿音速启动
  • 简易钓鱼网站的构建(Kali SetoolKit)
  • UNIX环境高级编程——UNIX基础知识
  • 我的ubuntu8.04安装经验
  • 常见几种浏览器兼容性问题与解决方案
  • Autodesk CAD帮助文档总结二 DXF 概述
  • smb+服务器+修复,Microsoft Windows
  • MySQL如何卸载干净以及下载、安装教程
  • oTree学习教程(七)Apps rounds
  • label设置自动换行的方法
  • HI3516DV300笔记(二)硬件适配
  • 单目3D检测新SOTA!PersDet:透视BEV中进行3D目标检测
  • 游戏开发博客
  • [转载]聊聊tcpdump与Wireshark抓包分析
  • C++实现刷屏代码(详细教程+代码)
  • H网、某播放器、某数字公司是一根绳上的三个蚂蚱
  • Python 爬虫实战 汽车某家(五) 口碑、评分
  • Java考试题30道(附答案)
  • DRS:一个开源的STORM系统,用于负载动态调整
  • AutoHotKey映射方向键和Home, End键
  • CTreeCtrl 类的InsertItem成员函数
  • 【时空流量预测笔记1】基于相关卷积LSTM和自注意网络的蜂窝网络流量预测
  • 【HTML基础】form表单常用的7种属性和9种元素详解(含在线练习网址)
  • Jmeter动态吞吐量实现
  • 源码、反码、补码(超详细解析)
  • android 电池监测工具,安卓最强电池监控器Battery Monitor Widget Pro
  • Android常用颜色对照表
  • 刚用uiotos交付了智慧园区统一管理平台,前端零代码+后端零代码+物联网平台,完美搭配!(一)|零代码、0代码、无代码、低代码、可视化编程、nodered、amis、codewave、乐吾乐
  • java编程思想第四版电子书,,终于有人把Java程序员必学知识点全整理出来了