ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

STM32F407 + lwIP(一):STM32的Web服务器介绍

STM32F407 + lwIP(一):STM32的Web服务器介绍 1.项目背景​ 在工业现场中经常会有客户问设备主机之后统一叫做主机参数如何修改如何配置然后在打开专用的上位机软件或者敲命令或者复杂的菜单去解决。​ 现场施工的师傅经常打电话“这个参数怎么配”“软件从哪里下载”“为什么连不上设备”我的想法是能不能让设备自己长出一个配置页面客户拿根网线插上浏览器打开IP就能配不需要装任何软件2.为什么选STM32F407 lwIP硬件选型STM32F407ZGT6自带以太网MAC,外接一个LAN8720A PHY芯片就能上网不需要额外的通信模块。对比其他方案串口配置需要专用软件用户学习成本高Wi-Fi模块工业环境干扰大不如有线稳定Linux开发板成本高、启动慢、功耗大协议栈选型lwIPlightweight IP是专为嵌入式设计的轻量级TCP/IP协议栈资源占用小几十KB ROM/RAM就能跑功能完整支持TCP/UDP/ICMP/DHCP/HTTP等开源免费BSD许可证可商用我选择的是裸机运行模式NO_SYS1不跑RTOS资源开销更小3. 整体架构图text┌──────────────────────────────────────────────────────────────┐ │ Web 浏览器 (PC) │ │ HTTP GET / POST 请求 │ └──────────────────────────┬───────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────┐ │ lwIP HTTP 服务器 │ │ ┌────────────────────────────────────────────────┐ │ │ │ HTTPD 核心 (httpd.c) │ │ │ │ - 解析请求路由到静态文件或 CGI │ │ │ │ - SSI 标签替换调用注册的 SSI Handler │ │ │ └────────────────────────────────────────────────┘ │ └──────────────────────────┬───────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────┐ │ 应用层 (httpd_cgi_ssi.c) │ │ ┌───────────────┐ ┌───────────────┐ ┌──────────────┐ │ │ │ SSI Handler │ │ CGI Handler │ │ SysData操作 │ │ │ │ (212个标签) │ │ (4个路由) │ │ (读写结构体) │ │ │ └───────────────┘ └───────────────┘ └──────────────┘ │ └──────────────────────────┬───────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────┐ │ 数据层SysData结构体 │ │ ┌────────────────────────────────────────────────────┐ │ │ │ 通讯定值 (IP/MAC/Modbus地址/端口/站点ID/...) │ │ │ │ 硬件接口定值 (配置) │ │ │ │ 参数配置 │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────────┬───────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────┐ │ 硬件层 (HAL) │ │ USART1 (调试), ETH, Flash, FSMC, 定时器等 │ └──────────────────────────────────────────────────────────────┘说明从下往上看。硬件层提供以太网、Flash存储、FSMC外部SRAM等能力数据层是SysData结构体所有配置参数都在这里应用层是SSI和CGI处理函数上层是lwIP的HTTPD服务器负责解析HTTP请求、调用SSI/CGI、返回网页给浏览器。4. 系统参数模型我用了一个SysData结构体来存储所有配置参数放在外部SRAM中具体的参数配置我这里就不做详细的说明了因为每个人的项目都不一样。我这边要求的参数很多内存不够所以我用到了外部SRAM.5. 核心数据流页面加载时浏览器请求.shtml→ HTTPD返回网页源码→ 遇到 标签→调用SSI Hander→从SysData读取值→替换标签→返回完整html用户保存时用户点击保存 → POST请求到/net.cgi→ HTTPD匹配CGI路由 → 解析参数 → 更新SysData → 写入Flash → 刷新页面显示新值6. 一句话总结这个项目让我完整走通了“设备端存储参数----web页面动态展示----用户修改并持久化保存”关键不是代码多复杂而是在资源受限的MCU上用最小的开销实现了完整的B/S配置体验。下一篇我会详细讲lwIP协议栈的移植过程包括硬件连接、lwIP配置和HTTPD服务器的启动。下一篇STM32F407 lwIP二lwIP协议栈移植与HTTPD服务器搭建
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进