• 正文
  • 相关推荐
申请入驻 产业图谱

STM32H7 以太网与 Mongoose:入门指南

11/01 08:23
34
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

摘要

本指南说明意法半导体(ST)怎么在 STM32H7 板上用轻量级 Mongoose 网络库把以太网 TCP/IP 拉起来,参考板是 NUCLEO-H723ZG。

步骤:建 STM32CubeMX 工程,配以太网、UART 调试、LED 与 RNG,再经 CubeMX software pack 加入 Mongoose,让工程自动带上源文件与 include 路径。

引言

本指南按步骤把 Mongoose 网络库集成进 STM32H7 固件,做以太网连接。集成后可用嵌入式 Web 仪表盘、MQTT 远程控制、TLS,以及空中(OTA)固件更新。目标很简单:在 STM32H7 上拉起 TCP/IP,跑一个 “Hello world” 嵌入式 Web 服务器,后面再叠更复杂的联网功能。

Mongoose 是轻量、开源、双许可的网络库,就两个文件,自带嵌入式 Web 服务器与网络栈。可以跟 lwIP 等现有 TCP/IP 栈一起用,也可以只用内建栈。TLS 也灵活:Mbed TLS、WolfSSL 等外部库,或 Mongoose 自带 TLS。

想快一点、少踩坑,建议先用内建网络栈。本指南用 NUCLEO-H723ZG;带内建以太网 MAC 的其他 STM32 也可照做。

附件含预配置 h723.ioc。想尽快出结果:用该 *.ioc 生成工程,用提供的 main.c 替换 Core/Src/main.c,用提供的 STM32H723XG_FLASH.ld 改链接脚本,构建并烧录即可。

前置条件

安装:

  • STM32CubeMX
  • 最新 STM32H7 HAL 驱动
  • I-CUBE-Mongoose 包
  • Visual Studio Code 的 STM32CubeIDE 扩展
  • STM32CubeProg

硬件:NUCLEO-H723ZG。

1. 配置外设

用 STM32CubeMX 从零配置所需外设。

打开 STM32CubeMX。File → New project,在料号栏输入 “H723ZG”,选中微控制器,点击 [Start project]。

出现存储器保护单元对话框时点 [Yes]。在 Project Manager 选项卡设置工程目录与名称;堆 64Kb,栈 8Kb。

Clock Configuration 选择最大系统频率并按 Enter 自动配置。

配置 LED、以太网 MAC、串口调试 UART 以及用于 TLS 的 RNG。各开发板引脚见对应用户手册;下表提供所需引脚速览:

板 UART TX/RX Ethernet LED
Nucleo-H723ZG USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB13, PG11, PG13 PB0, PE1, PB14
STM32H747I-DISCO USART1, PA9, PA10 PA1, PA2, PA7, PC1, PC4, PC5, PG11, PG12, PG13 PI12, PI13, PI14
STM32H735G-DK USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB11, PB12, PB13 PC3, PC2
STM32H573I-DK USART1, PA9, PA10 PA1, PA2, PA7, PC1, PC4, PC5, PG11, PG12, PG13 PI8, PI9, PF1
NUCLEO-N657X0-Q USART1, PE5, PE6 PF4, PF5, PF7, PF10, PF11, PF12, PF13, PF14, PF15 PG0, PG8, PG10
NUCLEO-H563ZI USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB15, PG11, PG13 PB0, PF4, PG4
NUCLEO-H7S3L8 USART3, PD8, PD9 PA2, PA7, PB6, PG4, PG5, PG6, PG11, PG12, PG13 PD10, PD13, PB7
NUCLEO-H745ZI-Q USART3, PB10, PB11 PA1, PA2, PA7, PC1, PC4, PC5, PB13, PG11, PG13 PI13, PJ2, PD3
NUCLEO-H755ZI-Q USART3, PD8, PD9 PA1, A2, A7, C1, C4, C5, G11, G12, PG13 PB0, PE1, PB14
NUCLEO-H753ZI USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB11, PB12, PB13 PC3, PC2, PC2
NUCLEO-H743ZI USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB13, PG11, PG13 PB0, PE1, PB14
NUCLEO-Fxxxxx USART3, PD8, PD9 PA1, PA2, PA7, PC1, PC4, PC5, PB13, PG11, PG13 PB0, PB7, PB14

在 Pinout & Configuration → System Core → GPIO,将 LED 脚设为 [GPIO_Output]。

Security 中选择 RNG,Mode = [Activated]。

Connectivity 中将 USART 设为 [Asynchronous mode] 并配置 Tx/Rx;将 ETH 设为 [RMII mode] 并配置以太网引脚,确保与上表一致。

2. 生成工程

在 Project Manager 选择目标 IDE,点击 [Generate Code]。本指南使用 VS Code STM32,故选择 CMake。

生成后在 VS Code 中打开该目录,先构建确认无错误。

3. 加入 Mongoose

可以把 GitHub(https://github.com/cesanta/mongoose)上的 mongoose.c / mongoose.h 拷进来,自己写一行 mongoose_config.h;更省事的是走 STM32CubeMX:Mongoose 已作为 middleware,能自动配 include,并带 Web dashboard、MQTT 等模块(后续文章再写)。

Pinouts & Configuration → Software Packs → Manage Software Packs → [Cesanta] → [Refresh],安装最新 I-CUBE-Mongoose(确保 7.21.4 或更高)。

Software Packs → Select Components,选中全部 Mongoose 组件。Middleware and Software Packs → [I-CUBE-Mongoose],使能 [Mongoose Networking Core],再 [Generate Code]。

将加入 Middlewares/Third_Party/Cesanta_Mongoose/,含 mongoose.c、mongoose.h、mongoose_config.h。

在 Core/Src/main.c 的用户代码块中包含:

/* USER CODE BEGIN Includes */ #include "mongoose.h" /* USER CODE END Includes */

在 USER CODE BEGIN 0 加入 _write(将 printf 重定向到串口)以及简单 HTTP 事件处理:

/* USER CODE BEGIN 0 */ int _write(int fd, unsigned char *buf, int len) { HAL_UART_Transmit(&huart3, buf, len, HAL_MAX_DELAY); return len; } static void http_ev_handler(struct mg_connection *c, int ev, void *ev_data) { if (ev == MG_EV_HTTP_MSG) { mg_http_reply(c, 200, "", "Hi from Mongoose! Tick %lu\r\n", HAL_GetTick()); } } /* USER CODE END 0 */

在 main 中初始化并运行 Mongoose:

/* USER CODE BEGIN WHILE */ struct mg_mgr mgr; mg_mgr_init(&mgr); mg_http_listen(&mgr, "http://0.0.0.0:80", http_ev_handler, NULL); while (1) { mg_mgr_poll(&mgr, 0);

Mongoose 用事件驱动处理连接,单任务里也能管多连接。若用 RTOS,把事件循环放独立任务,栈大约 8 KB。RTOS 与裸机都能跑。

4. 编辑链接脚本

打开 STM32H723XG_FLASH.ld,在 .bss (NOLOAD) 之前加入:

.eth_ram : { *(.eth_ram .eth_ram*) } > RAM_D2 AT > FLASH

以太网 MAC 用 DMA 传数据;驱动用 .eth_ram ELF 段定义 DMA 缓冲,必须放在以太网 DMA 够得到的存储器区域。不改的话,.eth_ram 可能跟 .bss 落在同一片区域,DMA 够不着。STM32H723 见 RM0468 第 2.4 节。

5. 构建与运行

重新构建固件。打开串口控制台(Windows 可用 VS Code 集成终端、putty、Tera Term;Linux/macOS 可用 cu):

$ sudo cu -l /dev/cu.usb* -s 115200

确保板卡接入带 DHCP 的以太网(可用 USB 转以太网并开启共享)。用 STM32CubeProgrammer 烧录,或在 VS Code 创建自定义 task.json:

{ "version": "2.0.0", "tasks": [ { "label": "Flash STM32", "type": "shell", "command": "STM32_Programmer_CLI", "args": [ "-c", "port=SWD", "-w", "${workspaceFolder}/build/Debug/*.elf", "-v", "-rst" ], "problemMatcher": [] } ] }

按 Ctrl+P,选 Run Task,再选 “Flash STM32”。

烧录后串口应出现 Mongoose 调试日志(示例含 PHY ID LAN87x、DHCP、READY IP 等)。在浏览器打开该 IP,应看到 Web 服务器输出。

结论

到这里,STM32 已经跑起以太网 TCP/IP 和简单 Web 服务器。Mongoose 还有更多能力,后续文章再写。

来源:https://community.st.com/stm32-mcus-60/stm32h7-ethernet-with-mongoose-getting-started-guide-165096 参数以意法半导体官方最新资料为准。

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn