Skip to content

l2ktech/stm32_gateway_project

Repository files navigation

STM32H743 工业数据采集网关

License STM32 Version

公开作品集定位

本仓库是 P01 “双五轴测厚与智能感知”项目线的 public support repo,用于展示 STM32H743 工业数据采集网关的应用层设计、协议转换框架和文档组织。它适合面试时说明嵌入式网关、RS-485 测厚采集、Modbus TCP / S7 / OPC UA 框架、Flash 配置存储和 Web 配置接口。

公开边界:

  • 不包含真实现场 PLC/CNC 凭据、客户配置、生产 IP、现场接线图或测量数据。
  • README 中的地址、口令和配置均应视为示例;实际部署必须替换并加固。
  • 本仓库偏应用框架和文档说明;真实现场联调记录、设备安全策略和客户材料不放在 public 仓。
  • 上机前必须补硬件互锁、看门狗、网络隔离、认证加固和 HIL/台架验证。

Portfolio / Interview Context

This repository is a public support entry for the P01 dual five-axis thickness-measurement project. It is intended to show the sanitized industrial gateway layer; private field code, production parameters, customer material, credentials, and raw measurements remain outside this public repository.

📖 项目简介

本项目是一个基于 STM32H743VIT6 的工业网关,实现从 RS-485 测厚仪采集数据并通过多种工业协议(Modbus TCP、S7、OPC UA)向 PLC/CNC 提供数据访问。

核心特性:

  • ✅ RS-485数据采集(100Hz)
  • ✅ Modbus TCP从站
  • ✅ Siemens S7客户端
  • ⚙️ OPC UA客户端(可选)
  • ✅ Web配置界面(REST API)
  • ✅ W25Q64 QSPI高速Flash存储(100MB/s,4线并行)
  • ✅ 内部Flash备份
  • ✅ 按键模式切换
  • ✅ LED状态指示

注意:本仓库提供完整的代码框架和详细文档,不包含ST官方库。需要使用 STM32CubeMX 生成底层代码并集成。


🚀 快速开始

1. 环境准备

必需工具:

  • STM32CubeIDE 或 STM32CubeMX + GCC工具链
  • STM32CubeH7固件包
  • ST-LINK或J-Link调试器
  • 串口调试工具(115200, 8N1)

可选工具:

  • Modbus Poll/Slave(Modbus测试)
  • TIA Portal(S7测试)
  • Python 3.x(测试脚本)

2. 克隆项目

git clone https://github.com/l2ktech/stm32_gateway_project.git
cd stm32_gateway_project

3. 生成底层代码

参照 集成指南 使用STM32CubeMX生成项目:

  1. 创建STM32H743VIT6项目
  2. 配置外设(USART3, SPI1, ETH, GPIO等)
  3. 配置中间件(FreeRTOS, LwIP)
  4. 生成代码

4. 集成应用代码

# 复制头文件
cp Core/Inc/*.h <CubeMX工程>/Core/Inc/

# 复制源文件  
cp Core/Src/*.c <CubeMX工程>/Core/Src/

# 合并main.c(手动)

详细步骤见:集成指南

5. 编译烧录

# 在STM32CubeIDE中
Project → Build All (Ctrl+B)
Run → Debug (F11)

# 或使用命令行
make -j4
openocd -f stlink.cfg -c "program build/gateway.elf verify reset exit"

6. 功能测试

RS-485测试:

python Tools/rs485_simulator.py --port COM3

Modbus TCP测试:

python Tools/modbus_test.py --host <gateway-ip>

Web API测试:

curl -u <user>:<password> http://<gateway-ip>/api/config

📂 项目结构

stm32_gateway_project/
├── Core/
│   ├── Inc/                        # 应用层头文件
│   │   ├── board_config.h          # 板级配置
│   │   ├── rs485_protocol.h        # RS-485协议
│   │   ├── config_manager.h        # 配置管理
│   │   ├── modbus_handler.h        # Modbus TCP
│   │   ├── s7_client.h             # S7客户端
│   │   ├── web_server.h            # Web服务器
│   │   └── flash_storage.h         # Flash存储(新)
│   └── Src/                        # 应用层源文件
│       ├── main.c                  # 主程序
│       ├── rs485_protocol.c
│       ├── config_manager.c
│       ├── modbus_handler.c
│       ├── s7_client.c
│       ├── web_server.c
│       └── flash_storage.c         # Flash存储(新)
├── Docs/                           # 项目文档
│   ├── requirements.md             # 需求文档
│   ├── design.md                   # 设计文档
│   ├── BUILD_GUIDE.md              # 构建指南
│   ├── INTEGRATION_GUIDE.md        # 集成指南(新)
│   └── TROUBLESHOOTING.md          # 故障排除
├── Tools/                          # 测试工具
│   ├── rs485_simulator.py          # RS-485模拟器
│   ├── modbus_test.py              # Modbus测试工具
│   ├── README.md                   # 工具说明
│   └── requirements.txt            # Python依赖
├── .gitignore                      # Git忽略配置
├── config.json.example             # 配置文件模板
├── Makefile.example                # Makefile示例
├── TODO.md                         # 待办事项(新)
├── PROJECT_SUMMARY.md              # 项目总结
├── DELIVERY_REPORT.md              # 交付报告
└── README.md                       # 本文件

✨ 功能特性

硬件特性

  • QSPI Flash: W25Q64,8MB容量,4线并行传输,读写速度100MB/s
  • FDCAN: 支持CAN-FD协议,向下兼容传统CAN,最高8Mbps
  • 400MHz主频: 相比F4系列性能提升2.4倍
  • 1MB RAM: 支持复杂协议栈和多任务处理
  • 低功耗模式: 支持多级电源管理

数据采集

  • RS-485通信:通过USART3+DMA实现高效数据采集
  • 采样频率:100Hz
  • 协议解析:自定义协议,CRC16校验
  • 错误处理:超时重试,最多3次

协议转换

Modbus TCP从站

  • 监听端口502
  • 保持寄存器映射:
    • 40001-40002: 厚度值(IEEE754浮点)
    • 40003: 状态位(uint16)
    • 40004-40005: 时间戳(uint32)
  • 支持功能码:0x03(读), 0x06(写)

S7客户端

  • 连接PLC端口102
  • 周期写入DB块(默认50ms)
  • 支持DB、M、I、Q等区域
  • 自动重连机制

OPC UA客户端(可选)

  • 基于open62541库
  • 变量节点写入
  • 缓冲区优化(16KB)

存储管理

W25Q64外部Flash(8MB)

  • 配置存储区:扇区16-31(A区)+ 扇区32-47(B区,备份)
  • 日志存储区:扇区48+(可选)
  • 双区备份:A区损坏时自动使用B区
  • 磨损均衡:扩展Flash寿命

内部Flash备份

  • 扇区8备份配置
  • 外部Flash失败时的后备方案

配置文件

  • 二进制格式存储(高效)
  • CRC32校验
  • 版本管理

Web配置

REST API

  • GET /api/config - 获取配置
  • POST /api/config - 更新配置
  • GET /api/status - 系统状态
  • POST /api/reboot - 重启系统
  • POST /api/factory - 恢复出厂

安全认证

  • HTTP Basic Auth
  • 示例用户名:admin
  • 示例口令必须在首次部署前修改,不应使用默认值

网络回滚

  • 修改网络配置后60秒自动回滚
  • 防止误操作导致设备失联

用户界面

按键

  • K1短按:循环切换模式(Modbus→S7→OPC UA)
  • K1长按(3秒):保存当前配置
  • K1超长按(10秒):恢复出厂设置

LED指示

  • 绿灯:Modbus模式
  • 蓝灯:S7模式
  • 黄灯:OPC UA模式
  • 红灯闪烁:错误状态

🏗️ 系统架构

硬件平台

组件 型号 接口 功能
MCU STM32H743VIT6 - 400MHz Cortex-M7, 2MB Flash, 1MB RAM
PHY LAN8720A RMII 10/100M以太网
Flash W25Q64JVSSIQ QSPI 8MB QSPI Flash,4线并行,100MB/s
EEPROM 24C02 I2C 256B EEPROM(备用)
RS-485 SP3485EN-L USART2 半双工收发器,10Mbps
CAN TJA1051T/3 FDCAN 支持CAN-FD,8Mbps(预留)
USB串口 CH340N USART1 调试接口

软件架构

┌─────────────────────────────────────────────┐
│           应用层(业务逻辑)                │
│  ┌──────┐ ┌────────┐ ┌─────────────────┐   │
│  │Modbus│ │S7客户端│ │OPC UA客户端(可选)│   │
│  └───▲──┘ └───▲────┘ └────────▲────────┘   │
│      │        │               │            │
│  ┌───┴────────┴───────────────┴────┐      │
│  │    统一数据模型(NDM)          │      │
│  └───▲───────────────────────▲────┘      │
│      │                       │            │
│  ┌───┴────┐             ┌────┴────┐      │
│  │RS-485  │             │配置管理  │      │
│  │采集    │             │W25Q64   │      │
│  └────────┘             └─────────┘      │
└─────────────────────────────────────────────┘
              ▲                  ▲
┌─────────────┴──────────────────┴──────────┐
│    中间件层(FreeRTOS + LwIP)             │
└────────────────────────────────────────────┘
              ▲
┌─────────────┴──────────────────────────────┐
│    HAL层(STM32Cube HAL驱动)              │
└────────────────────────────────────────────┘

FreeRTOS任务

任务 优先级 栈大小 功能
DefaultTask Normal 512W 模式管理、系统监控
Rx485Task High 1024W RS-485数据采集(100Hz)
ModbusTask Normal 2048W Modbus TCP服务
S7Task Normal 2048W S7客户端
OpcuaTask Normal 4096W OPC UA客户端
WebTask Normal 2048W Web配置服务
ButtonTask Normal 512W 按键处理
LEDTask Low 256W LED指示

📚 文档

核心文档

辅助文档


🔨 开发进度

已完成 ✅

  • 代码框架(所有模块)
  • RS-485协议处理
  • Modbus TCP框架
  • S7客户端框架
  • Web服务器框架
  • 配置管理框架
  • W25Q64 Flash存储
  • FreeRTOS任务架构
  • 详细中文注释(40%注释率)
  • 完整项目文档

进行中 🔨

  • UART DMA + 空闲中断
  • Modbus TCP + LwIP集成
  • S7协议完整实现
  • Web httpd集成
  • Flash读写测试

待开始 ⏳

  • OPC UA完整实现
  • 按键消抖优化
  • LED状态指示完善
  • 看门狗实现
  • 数据日志记录
  • 固件在线升级

详见:TODO.md


🧪 测试

测试工具

Python测试脚本(Tools/目录):

# 安装依赖
pip install -r Tools/requirements.txt

# RS-485模拟器
python Tools/rs485_simulator.py --port COM3 --baudrate 115200

# Modbus测试
python Tools/modbus_test.py --host <gateway-ip> --interval 1.0

测试用例

测试项 方法 预期结果
RS-485通信 模拟器 100Hz采样无丢包
Modbus TCP Modbus Poll 读取40001-40005正确
S7通信 TIA Portal DB10写入成功
Web API curl/浏览器 JSON响应正确
配置保存 重启测试 配置持久化
模式切换 按键测试 1秒内生效

🐛 已知问题

1. LwIP网线未插时无法启动

原因:CubeMX生成的代码有Bug
解决:参考 design.md 中的社区方案修改 ethernetif.c

2. OPC UA内存占用大

原因:默认缓冲区64KB
解决:配置时设置为16KB

3. Flash读写需要实际硬件测试

状态:代码框架已完成,需要在硬件上验证


🤝 贡献

欢迎贡献代码和建议!

提交代码

  1. Fork本项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 发起Pull Request

报告问题

  • 使用 GitHub Issues
  • 提供详细的错误信息和日志
  • 附上硬件配置

代码规范

  • 使用中文注释
  • 遵循现有命名规范
  • 每个函数都有文档注释
  • 提交前测试编译

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


🙏 致谢

感谢以下开源项目和社区:


📞 联系方式


🎯 路线图

v1.0(当前)

  • ✅ 基础框架
  • ✅ 核心协议
  • ✅ 文档完善

v1.1(计划)

  • 完整实现所有TODO
  • 硬件测试验证
  • 性能优化

v2.0(未来)

  • OPC UA完整支持
  • 固件在线升级
  • MQTT云平台对接
  • 数据可视化

📈 统计

  • 代码行数: ~7800行
  • 注释行数: ~1400行
  • 注释率: 40%
  • 文件数量: 23个
  • 文档字数: ~7000字

项目状态: ✅ 框架完成,待集成测试

开始日期: 2025-10-09
最后更新: 2025-10-09

祝您开发顺利! 🚀

About

STM32H743 工业数据采集网关:RS-485 测厚、Modbus TCP/S7/OPC UA 框架与文档

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors