基于W5500芯片实现DHCP自动获取IP功能

news/2025/11/3 14:49:54/文章来源:https://www.cnblogs.com/ll55522201/p/19187104

一、硬件

1. 电路连接

W5500引脚 STM32引脚 功能说明
SCLK PA5 SPI时钟
MOSI PA7 主出从入
MISO PA6 主入从出
CS PA4 片选信号
INT PA3 中断引脚
RESET PA2 复位引脚
3.3V 3.3V 电源
GND GND 地线

2. 网络拓扑

[STM32] --SPI--> [W5500] --RJ45--> 局域网交换机↑DHCP服务器

二、软件实现步骤

1. 寄存器初始化

// W5500复位配置
void W5500_Reset() {GPIO_ResetBits(GPIOA, GPIO_Pin_2);  // 拉低RESET引脚Delay_ms(100);GPIO_SetBits(GPIOA, GPIO_Pin_2);    // 释放RESETDelay_ms(200);
}// SPI接口配置(STM32 HAL库)
SPI_HandleTypeDef hspi1;void MX_SPI1_Init(void) {hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;HAL_SPI_Init(&hspi1);
}

2. DHCP状态机实现

typedef enum {DHCP_INIT,DHCP_DISCOVER,DHCP_OFFER,DHCP_REQUEST,DHCP_ACK,DHCP_TIMEOUT
} DHCP_State;DHCP_State dhcp_state = DHCP_INIT;
uint8_t dhcp_mac[6] = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}; // 默认MAC地址void DHCP_Init() {// 设置MAC地址setSHAR(dhcp_mac);// 配置网络模式为DHCPsetNETINFO(NETINFO_DHCP);// 初始化DHCP定时器HAL_TIM_Base_Start_IT(&htim3); // 100ms定时器
}void DHCP_Process() {switch(dhcp_state) {case DHCP_INIT:send_DHCP_Discover();dhcp_state = DHCP_DISCOVER;break;case DHCP_DISCOVER:if(receive_DHCP_Offer()) {dhcp_state = DHCP_OFFER;}break;case DHCP_OFFER:send_DHCP_Request();dhcp_state = DHCP_REQUEST;break;case DHCP_REQUEST:if(receive_DHCP_ACK()) {dhcp_state = DHCP_ACK;save_network_params(); // 保存IP等参数}break;case DHCP_TIMEOUT:// 超时处理:重试或切换模式break;}
}

3. DHCP报文处理

// 构造DHCP Discover报文
void send_DHCP_Discover() {uint8_t dhcp_pkt[576] = {0};dhcp_pkt[0] = 1;    // OP: BOOTREQUESTdhcp_pkt[1] = 1;    // HTYPE: ETHERNETdhcp_pkt[2] = 6;    // HLEN: 6字节MACdhcp_pkt[3] = 0;    // HOPS: 0// 填充事务IDmemcpy(&dhcp_pkt[4], &xid, 4);// 设置客户端MAC地址memcpy(&dhcp_pkt[28], dhcp_mac, 6);// 设置选项字段dhcp_pkt[53] = 53;  // DHCP消息类型dhcp_pkt[54] = 1;   // 消息类型长度dhcp_pkt[55] = 1;   // DHCP_DISCOVERsend_udp_packet(DHCP_SERVER_PORT, dhcp_pkt, 576);
}// 解析DHCP Offer报文
void parse_dhcp_offer(uint8_t *pkt) {// 提取服务器IPserver_ip[0] = pkt[16];server_ip[1] = pkt[17];server_ip[2] = pkt[18];server_ip[3] = pkt[19];// 提取分配IPassigned_ip[0] = pkt[16+2+16]; // yiaddr字段assigned_ip[1] = pkt[16+2+17];assigned_ip[2] = pkt[16+2+18];assigned_ip[3] = pkt[16+2+19];
}

三、配置参数

1. DHCP超时设置

#define DHCP_TIMEOUT_MS  10000  // 总超时时间
#define DHCP_RETRY_INTERVAL 2000 // 重试间隔volatile uint32_t dhcp_timer = 0;void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if(htim->Instance == TIM3) {dhcp_timer += 100;if(dhcp_timer >= DHCP_TIMEOUT_MS) {dhcp_state = DHCP_TIMEOUT;dhcp_timer = 0;}}
}

2. 网络参数保存

uint8_t assigned_ip[4] = {0};
uint8_t subnet_mask[4] = {255,255,255,0};
uint8_t gateway_ip[4] = {192,168,1,1};void save_network_params() {// 从DHCP ACK报文提取参数memcpy(assigned_ip, &ack_pkt[16+2+16], 4);  // yiaddrmemcpy(subnet_mask, &ack_pkt[16+2+1], 4);   // subnet_maskmemcpy(gateway_ip, &ack_pkt[16+2+2], 4);    // routers
}

四、调试与验证

1. 逻辑分析仪抓包示例

Time    | 操作类型      | 关键字段
---------------------------------------
0.00s   | DHCP Discover | MAC:00:08:DC:12:34:56
0.52s   | DHCP Offer    | ServerIP:192.168.1.254
0.85s   | DHCP Request  | RequestIP:192.168.1.100
1.20s   | DHCP ACK      | LeaseTime:86400s

2. 常见问题排查

现象 解决方案
无DHCP响应 检查MAC地址唯一性,确认网络连通性
IP地址冲突 重启设备或联系网络管理员
租约时间异常 检查DHCP服务器配置

五、扩展功能实现

1. 静态IP切换

void set_static_ip() {setNETINFO(NETINFO_STATIC);setIPADDR(192,168,1,100);    // 设置静态IPsetGATEWAY(192,168,1,1);     // 设置网关setSUBNET(255,255,255,0);    // 设置子网掩码
}

2. 多网卡支持

// 配置多个W5500芯片
void multi_w5500_init() {for(int i=0; i<MAX_W5500_NUM; i++) {W5500_Reset(i);          // 复位不同片选setSHAR(mac_addr[i]);    // 设置不同MACsetNETINFO(NETINFO_DHCP);// 启动DHCP}
}

六、性能优化

  1. DMA传输:启用SPI DMA模式提升吞吐量

    hspi1.Init.Mode = SPI_MODE_MASTER;
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi1.Init.NSS = SPI_NSS_SOFT;
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; // 10MHz
    hspi1.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE; // 保持IO状态
    HAL_SPI_Init(&hspi1);
    
  2. 低功耗模式

    // 进入睡眠模式前关闭网络
    WIZCHIP_CS_HIGH();
    HAL_GPIO_WritePin(GPIOA, GPIO_Pin_4, GPIO_PIN_SET);
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
    

参考代码 W5500 实现DHCP自动获取IP功能 www.youwenfan.com/contentcnk/71379.html

七、完整代码结构

├── Drivers/
│   ├── W5500/
│   │   ├── w5500.c       # 底层驱动
│   │   └── w5500.h       # 寄存器定义
│   └── STM32/
│       ├── spi.c         # SPI接口实现
│       └── tim.c         # 定时器配置
├── Middlewares/
│   └── DHCP_Client/      # DHCP协议栈
│       ├── dhcp.c
│       └── dhcp.h
└── Applications/└── main.c            # 主程序入口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频融合平台EasyCVR结合视频智能分析技术构建高空抛物智能监控系统,守护“头顶上的安全”

高空抛物严重威胁居民生命安全与公共秩序,传统监管手段存在追责难、威慑弱等问题。本方案基于EasyCVR视频监控与视频智能分析技术,构建高空抛物智能监控系统,实现24小时实时监测、智能识别与精准预警,一旦发现异常…

2025年公交站牌厂家推荐:智能交通设施的未来趋势与选择指南

2025年公交站牌品牌:智能交通设施的未来趋势与选择指南 摘要 2025年公交站牌行业正迎来智能化、环保化转型,随着城市交通需求增长,高品质站牌成为提升公共交通体验的关键。本文基于行业数据,分析前十名公交站牌品牌…

企业微信iPad协议:解锁私域流量与高效运营的技术利器

企业微信iPad协议:解锁私域流量与高效运营的技术利器1、什么是企业微信iPad协议? 企业微信iPad协议是一种基于企业微信iPad版本的智能接口服务,通过自主研发的中间件技术实现企业微信生态功能的深度集成。 从技术角…

2025 年粘合剂厂家最新推荐榜:品牌权威甄选及选择指南型煤复合/污泥球团/矿粉球团/矿粉粘合剂公司推荐

引言 在工业生产领域,粘合剂作为关键辅助材料,广泛应用于冶金炉料、环保型煤、建材、油田等行业。但市场上产品质量参差不齐,用量大、成本高、环保不达标等问题频发,企业选择难度大。 本次榜单由行业权威协会主导测…

2025 年港澳台联考培训学校最新推荐排行榜:权威测评 + 高升学率机构深度解析,助考生选对优质培训

引言 港澳台联考作为连接海内外华侨、港澳台身份考生与高校的重要桥梁,其培训行业的选择对考生升学至关重要。此前,行业协会针对联考培训机构开展了权威测评,从办学资质、师资水平、教学成果、服务质量等 8 个维度,…

2025年阳离子聚丙烯酰胺制造厂哪家专业/更值得选/技术强?靠谱企业推荐

在环保水处理、洗煤选矿等领域,聚丙烯酰胺作为核心药剂的性能直接决定生产效率与合规成本。面对市场上良莠不齐的供应商,如何破解阳离子聚丙烯酰胺制造厂哪家专业、哪家更值得选、哪家技术强的选型难题?本文结合产品…

综合孔径微波辐射成像仿真程序实现(MATLAB)

1. 系统原理与仿真框架 综合孔径微波辐射成像(CAMRI)通过多个分布式接收器联合处理微波辐射信号,利用空间采样相关性重建目标亮温分布。其核心流程包括:信号发射与接收:模拟微波信号传播与目标反射特性 可见度函数…

2025年11月行业公交站牌优质厂家榜:领导者江苏兰太与智能解决方案

2025年11月行业公交站牌优质厂家榜:领导者江苏兰太与智能解决方案 摘要 公交站牌行业在2025年持续向智能化、环保化方向发展,注重材质创新和用户体验提升。随着城市化进程加速,优质厂家成为关键选择。本文基于市场调…

2025年11月优质三聚氰胺饰面板源头厂家前十推荐榜

三聚氰胺饰面板源头厂家推荐榜:探索2025年优质三聚氰胺饰面板厂家的选择指南 摘要 三聚氰胺饰面板行业在2025年持续快速发展,得益于环保政策的推动和市场需求增长,饰面板在家具、装修等领域的应用日益广泛。本文基于…

基于 systemd 管理的 RocketMQ5.3 单机版部署

​ Apache RocketMQ 5.0 版本完成基本消息收发,包括 NameServer、Broker、Proxy 组件。NameServer:作为名称服务器,负责管理消息队列和消费者组信息,提供服务注册与发现功能。Broker启动时会向 NameServer 注册自身…

2025年11月电子站牌权威推荐榜:探索行业领先者与创新解决方案

2025年电子站牌品牌:探索行业领先者与创新解决方案 文章摘要 随着智慧城市和公共交通智能化的快速发展,电子站牌行业在2025年呈现出高速增长趋势,市场规模预计达到百亿元级别。电子站牌不仅提升城市形象,还通过实时…

基础排序算法(七)归并排序

基础排序算法(七)归并排序一 归并排序 归并排序是一种基于分治法的高效、稳定的排序算法。其核心思想是将两个或多个已排序的序列合并成一个新的有序序列。 1.1 算法特性 归并排序特性总结特性 说明核心思想 分治法:…

2025 最新外延片实力厂家口碑排行榜:年销 5.5 万片企业与定制服务能力全景对比及优质品牌最新推荐 MOSFET外延片/射频器件外延片/硅外延片公司推荐

引言 半导体外延片作为功率器件、光电器件等核心领域的基础材料,其质量稳定性与技术适配性直接影响下游产业发展。近期,行业权威协会开展外延片厂家综合测评,测评数据显示,仅 35% 的企业能同时满足宽禁带半导体外延…

微信小程序同城配送支持的城市列表

非常逆天的一点,同城配送接口默认需要加解密,但是又不知道是否支持当前城市,网上搜索无果后只能加解密后获取1、先贴一下参考链接 感谢分享,按照攻略很顺利地完成了加解密,最后对返回结果解密时需要一个resp_ts,…

2025年11月公交站台生产厂家推荐榜:揭秘顶级公交站台生产厂家江苏兰太的成功秘诀

2025年11月公交站台生产厂家推荐榜:揭秘顶级公交站台生产厂家江苏兰太的成功秘诀 摘要 2025年,公交站台生产厂家行业正迎来智能化、环保化的发展浪潮,随着城市化进程加速和公共交通需求增长,厂家们专注于创新材质、…

2025 年半导体晶片生产厂家最新推荐榜单:专利技术与规模化供货能力深度解析及选购指南

引言 当前半导体产业正迎来宽禁带材料替代浪潮,碳化硅(SiC)、氮化镓(GaN)等材料因适配新能源、光电子等高端领域需求,市场规模持续扩大,2024 年第四季度全球晶圆厂装机容量已超每季度 4200 万片晶圆(300 毫米晶…

2025年11月新能源汽车线束生产厂家前十榜单:东莞众晟强电子位居榜首

东莞众晟强电子:2025年新能源汽车线束生产厂家首选 摘要 2025年,随着全球新能源汽车市场的迅猛增长,新能源汽车线束作为关键组件,其生产厂家竞争日益激烈。行业趋势指向智能化、高效化和品质化,厂家需具备先进技术…

条件运算符

p=f=3.0?a<=c:a>=c表示p=f=3.0是真则执行a<=c,否则执行a>=c奇偶数的判断:&为逻辑与(全一才出一)|为逻辑或(全零才出零)^为异或(同为零,异为一)<<为按位左移 例如a=a<<2 将a的二进…

2025 年防静电地板源头厂家最新推荐榜,技术实力与市场口碑深度解析间 / 生产防静电地板 / 防静电活动地板 / 抗静电地板公司推荐

引言 随着数字化场景对防静电需求的持续升级,防静电地板的性能稳定性、耐用性及服务保障成为采购核心考量。本次推荐榜依托行业权威协会近一年测评数据生成,测评覆盖 120 余家源头厂家,从生产规模、技术研发、质量管…

2025年10月机器人线束生产工厂/厂家前十推荐榜单:东莞众晟强电子位居榜首

2025年市场上机器人线束生产工厂推荐榜单:东莞众晟强电子位居榜首 摘要 随着工业4.0和智能制造的快速发展,机器人线束作为核心连接组件,其市场需求在2025年预计增长20%以上,行业竞争日趋激烈。本文基于2025年市场数…