news 2026/9/18 21:40:40

RIOT OS 板级支持详解:STM32 Nucleo-F746ZG(ARM Cortex-M7 开发板)的资源配置、烧录与调试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RIOT OS 板级支持详解:STM32 Nucleo-F746ZG(ARM Cortex-M7 开发板)的资源配置、烧录与调试

RIOT OS 板级支持详解:STM32 Nucleo-F746ZG(ARM Cortex-M7 开发板)的资源配置、烧录与调试

【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT

Nucleo-F746ZG 是 ST 官方 Nucleo-144 系列中面向高性能应用的代表板卡,搭载 STM32F746ZG 微控制器(ARM Cortex-M7 内核,主频最高 216 MHz),拥有 320 KiB RAM 与 1 MiB Flash。本文以 RIOT OS 仓库中 boards/nucleo-f746zg/doc.md 为骨架,结合板级源码(periph_conf.hMakefile.featuresMakefile.dep等)与通用 STM32 烧录基础设施,系统讲解该板卡在 RIOT OS 下的硬件资源配置、外设可用性、编译烧录流程与串口调试方法,帮助你快速将 RIOT 应用跑在 Nucleo-F746ZG 上。

板卡总览:Nucleo-F746ZG 与 RIOT 的适配情况

Nucleo-F746ZG 属于 ST 的 Nucleo-144(板级通用组boards_common_nucleo144)系列,RIOT OS 为其提供了完整的板级支持,板卡名称为nucleo-f746zg。该板的核心特征如下:

  • 板载STM32F746ZG(ARM Cortex-M7,带双精度 FPU 的浮点单元);
  • 存储资源充裕:320 KiB RAM、1 MiB Flash,适合运行 RIOT 网络栈、文件系统或较高复杂度的应用;
  • 板载ST-Link 调试器(同时提供虚拟串口 VCP),开箱即可烧录与查看 RIOT shell 输出;
  • 板载以太网 PHY,RIOT 侧通过stm32_eth驱动即可启用 Ethernet;
  • 引脚布局兼容 Arduino UNO / Mega 类扩展板(来自 Nucleo-144 公共特性)。

RIOT 的板级支持目录结构如下(boards/nucleo-f746zg):

boards/nucleo-f746zg/ ├── include/periph_conf.h # 外设引脚与 DMA 配置 ├── Kconfig # 板级 Kconfig 配置 ├── Makefile # 板级构建规则 ├── Makefile.dep # 板级模块依赖 ├── Makefile.features # 板级提供的特性列表 ├── Makefile.include # 公共头文件路径 └── doc.md # 板级文档(本文章骨架)

MCU 参数与资源一览

原文档在“MCU”小节给出了 STM32F746ZG 的完整规格表,这是评估应用可行性的关键依据:

MCUSTM32F746ZG
内核ARM Cortex-M7
厂商ST Microelectronics
RAM320 KiB
Flash1 MiB
主频最高 216 MHz
FPU支持(Cortex-M7 双精度)
定时器18 个(12×16-bit、2×32-bit、1×RTC、1×SysTick、2×看门狗)
ADC3×12-bit(共 24 通道)
UART4 个(USART/UART)
SPI6 个
CAN2 个
RTC1 个
I2C4 个
供电电压1.7V - 3.6V

其中 RAM/Flash 容量、216 MHz 主频与 320 KiB RAM 是选择该板运行 RIOT 的关键考量:例如在开启 IPv6/CoAP 网络栈或挂载文件系统时,充裕的 RAM 能显著降低内存压力。官方数据手册、参考手册(RM0385)、编程手册与板卡手册的获取方式均列在原文档中,可在实际开发中对照查阅。

引脚分布(Pinout)

原文档附有来自 STM 用户手册 UM1974(第 32 页)的引脚分布图:

Nucleo-144 系列共用同一套板级引脚布局,因此该图同样适用于 Nucleo-F746ZG。图中标注了 Arduino 兼容排针(CN7/CN10)与 ST 形态排针(CN11/CN12)的引脚定义。需要说明的是,RIOT 中实际启用的引脚并非全部遵循 Arduino 命名,而是以 boards/nucleo-f746zg/include/periph_conf.h 中的GPIO_PIN(PORT_x, n)定义为准(如 PWM 通道的注释中同时标注了D6/D5/D3等 Arduino 引脚号,便于对照扩展板)。

外设配置深度解析:periph_conf.h 中的资源映射

板级适配的核心是 boards/nucleo-f746zg/include/periph_conf.h,它通过static const配置数组向 RIOT 外设子系统(periph_*)声明了可用的 DMA、PWM、UART、SPI 与 ETH。下面逐项拆解。

DMA 流配置

板级声明了 8 条 DMA 流,供 UART/SPI/ETH 复用:

static const dma_conf_t dma_config[] = { { .stream = 4 }, /* DMA1 Stream 4 - USART3_TX */ { .stream = 14 }, /* DMA2 Stream 6 - USART6_TX */ { .stream = 6 }, /* DMA1 Stream 6 - USART2_TX */ { .stream = 10 }, /* DMA2 Stream 2 - SPI1_RX */ { .stream = 13 }, /* DMA2 Stream 5 - SPI1_TX */ { .stream = 11 }, /* DMA2 Stream 3 - SPI4_RX */ { .stream = 12 }, /* DMA2 Stream 4 - SPI4_TX */ { .stream = 8 }, /* DMA2 Stream 0 - ETH_TX */ };

对应中断服务函数由DMA_n_ISR宏映射(如isr_dma1_stream4isr_dma2_stream6等),DMA_NUMOFARRAY_SIZE(dma_config)推导。这些 DMA 通道只有在编译期启用MODULE_PERIPH_DMA时才会被 UART/SPI 驱动引用(见下文条件编译块)。

UART:3 路可用串口

板级声明了 3 路 UART(USART3、USART6、USART2),配置项包括引脚、复用功能(AF)、时钟总线与 IRQ,且在MODULE_PERIPH_DMA开启时绑定对应的 DMA 索引与通道:

UART 索引外设RX 引脚TX 引脚时钟/总线DMA(dma/chan)
0USART3PD9PD8APB10 / 7(USART3_TX)
1USART6PG9PG14APB21 / 5(USART6_TX)
2USART2PD6PD5APB12 / 4(USART2_TX)

中断入口通过UART_n_ISR宏映射到isr_usart3/isr_usart6/isr_usart2。需要特别注意的是,ST-Link 虚拟串口(VCP)对应的默认控制台 UART各 Nucleo 型号并不相同,务必以本板periph_conf.hSTDIO_UART_DEV的实际接线为准——RIOT 通用文档也明确提示要查阅对应板卡的periph_conf.h确认该连接。

SPI:SPI1 与 SPI4

板级提供 2 路 SPI。其中 SPI1 有一个值得注意的引脚冲突处理:默认 MOSI 为 PA7(为兼容 Arduino 类扩展板),但 PA7 同时连接板载以太网 PHY 的 RMII_DV 信号,因此当启用板载以太网时(MODULE_PERIPH_ETH),SPI1 的 MOSI 会被重映射到 PB5

#ifdef MODULE_PERIPH_ETH .mosi_pin = GPIO_PIN(PORT_B, 5), #else .mosi_pin = GPIO_PIN(PORT_A, 7), #endif

该行为在 boards/nucleo-f746zg/Makefile 中也有呼应——当USEMODULE包含stm32_eth时,构建系统会打印一条提示信息,告知 SPI_DEV(0) 的 MOSI 已从 PA7 重映射到 PB5 以解决引脚冲突。SPI 配置同样在MODULE_PERIPH_DMA下绑定收发 DMA(SPI1 用 DMA 索引 4/3,SPI4 用 6/5)。

PWM:TIM1 与 TIM4

板级通过 TIM1 和 TIM4 提供 8 路 PWM 通道,注释中标注了对应的 Arduino 引脚号,便于直接驱动电机、LED 等:

  • TIM1(APB2):PE9(D6/CN10-4)、PE11(D5/CN10-6)、PE13(D3/CN10-10)、PE14(D38/CN10-28);
  • TIM4(APB1):PD12(D29/CN10-21)、PD13(D28/CN10-19)、PD14(D10/CN7-16)、PD15(D9/CN7-18)。

ETH:板载 RMII 以太网

板级定义了完整的eth_conf_t配置,使能 RMII 模式、100 Mbit/s 全双工,PHY 地址为0x00

static const eth_conf_t eth_config = { .mode = RMII, .speed = MII_BMCR_SPEED_100 | MII_BMCR_FULL_DPLX, .dma = 7, .dma_chan = 8, .phy_addr = 0x00, .pins = { PG13, PB13, PG11, PC4, PC5, PA7, PC1, PA2, PA1 }, };

ETH 的 TX 使用 DMA2 Stream 0(ETH_DMA_ISR映射为isr_dma2_stream0)。在模块层面,boards/nucleo-f746zg/Makefile.dep 规定:只要应用使用了netdev_default(默认网络设备选择),就会自动追加stm32_eth模块,从而实现“编译即带以太网”。

板级特性与模块依赖

boards/nucleo-f746zg/Makefile.features 声明了该板提供的 RIOT 特性(FEATURES_PROVIDED):

periph_dma periph_eth periph_i2c periph_pwm periph_rtc periph_rtt periph_spi periph_timer periph_uart periph_usbdev riotboot tinyusb_device

即:除常规的 UART/SPI/I2C/PWM/定时器外,该板还额外提供 DMA、以太网、USB 设备(periph_usbdev)、riotboot启动引导与tinyusb_device(TinyUSB 设备栈)支持。

此外,通过引入boards/common/nucleo144/Makefile.features(见 boards/common/nucleo144/Makefile.features),该板还继承了 Nucleo-144 公共特性:

arduino_analog arduino_i2c arduino_pins arduino_shield_mega arduino_shield_uno arduino_spi arduino_uart

这意味着 Nucleo-F746ZG 可兼容 Arduino UNO 与 Mega 类扩展板,arduino_*特性供 RIOT 的 Arduino API 兼容层(pkg/arduino_api)使用。CPU 型号在构建系统中定义为CPU = stm32CPU_MODEL = stm32f746zg

依赖关系方面,Makefile.dep中除netdev_default → stm32_eth外,还引入了boards/common/nucleo/Makefile.dep以继承公共依赖。Kconfig 侧(boards/nucleo-f746zg/Kconfig)则声明BOARD_NUCLEO_F746ZGselect BOARD_COMMON_NUCLEO144select CPU_MODEL_STM32F746ZG,并source公共的nucleo144/Kconfig,保证菜单配置与构建系统一致。

烧录与调试:从编译到运行

支持的程序员(Programmer)

Nucleo-F746ZG 板载 ST-Link,RIOT 的 STM32 通用烧录基础设施(makefiles/boards/stm32.inc.mk)默认选择OpenOCD,并支持以下程序员:

PROGRAMMER ?= openocd PROGRAMMERS_SUPPORTED += bmp dfu-util openocd stm32flash
  • openocd(默认):调试适配器默认为stlinkOPENOCD_DEBUG_ADAPTER ?= stlink),并且默认启用OPENOCD_RESET_USE_CONNECT_ASSERT_SRST = 1——这是 STM32 板的重要容错设置:当固件硬故障(hardfault)导致板子无法正常复位时,仍可通过 assert SRST 恢复可烧录状态。
  • stm32flash:使用串口/UART 引导加载器烧录,PROG_BAUD默认 57600,烧录地址由ROM_START_ADDRROM_OFFSET计算,可通过STM32FLASH_RESET/STM32FLASH_RESET_INVERT控制 BOOT0/RST 的自动切换时序(需 TTL 适配器将 BOOT0 接 RTS、RST 接 DTR)。
  • bmp(Blackmagic Probe)与dfu-util(USB DFU)为可选备选方案。

此外,Nucleo 公共构建文件(boards/common/nucleo/Makefile.include)还支持cpy2remed程序员(将固件复制到 ST-Link 的可移动磁盘),其目标目录名由板名推导(如NODEF746ZG)。

常用烧录命令

使用默认 OpenOCD/ST-Link 烧录当前应用:

make BOARD=nucleo-f746zg flash

如需显式指定其他程序员(以 stm32flash 为例):

make BOARD=nucleo-f746zg PROGRAMMER=stm32flash flash

访问 RIOT shell

Nucleo 系列板卡统一通过ST-Link 虚拟串口(VCP)提供 RIOT shell 访问(见 boards/common/nucleo144/doc.md),默认波特率为115200,8N1。Linux 下通常体现为/dev/ttyACM0之类的设备节点,连接命令示例:

make BOARD=nucleo-f746zg term

或使用 miniterm 手动连接:

miniterm.py /dev/ttyACM0 115200

ST-Link 虚拟串口同时承担调试器串口标识的作用——构建系统通过DEBUG_ADAPTER_ID_IS_TTY_SERIAL := 1TTY_BOARD_FILTER--model 'STM32 STLink')在多板共存时自动筛选出正确的串口设备。

快速上手:一个最小示例

以 RIOT 示例应用(如examples/hello-world)在本地编译并烧录到 Nucleo-F746ZG:

# 在示例目录编译 make BOARD=nucleo-f746zg -C examples/hello-world # 烧录(默认 OpenOCD + ST-Link) make BOARD=nucleo-f746zg -C examples/hello-world flash # 打开 shell(115200 8N1) make BOARD=nucleo-f746zg -C examples/hello-world term

若应用包含netdev_default(例如网络示例),构建系统会自动引入stm32_eth模块并启用板载以太网,同时 SPI1 MOSI 会自动重映射到 PB5,无需手动干预。

小结

Nucleo-F746ZG 是 RIOT OS 中一款“资源富裕”的 Cortex-M7 板卡:1 MiB Flash、320 KiB RAM、板载以太网、USB 设备支持与 Arduino 兼容特性使其非常适合网络协议栈、存储类与中等复杂度 IoT 应用的快速原型。通过本板periph_conf.h中清晰的引脚与 DMA 映射、Makefile.features中声明的特性,以及 STM32 通用烧录链路(默认 OpenOCD + ST-Link),开发者可以用标准的make BOARD=nucleo-f746zg flash流程完成从编译、烧录到 shell 调试的完整闭环。需要更深入的板级实现时,可继续阅读 boards/common/nucleo144 与 cpu/stm32 下的公共代码。

【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 21:35:57

交互与信令设计:状态机、超时重传与可靠通信实践

开头先说实话,交互与信令这两个词放在一起,最容易让人想到通信协议、VoLTE、5G信令流程这种重型电信场景。但你把这个标题拆开看,其实它描述的是一类非常通用的问题:两个独立的模块(或系统、或角色)&#x…

作者头像 李华
网站建设 2026/9/18 21:35:17

光盘摆渡机:物理隔离下的自动化数据交换与校验

简介:这是一份面向政府机关、涉密单位信息化建设人员与网络安全方案设计者的技术报告文档,围绕内外网物理隔离场景下的光盘摆渡机解决方案展开。报告从国家关于涉密计算机信息系统必须实行物理隔离的法规要求出发,剖析了人工刻盘效率低下、网…

作者头像 李华
网站建设 2026/9/18 21:34:40

YOLOSHOW 跑 main.py 起不来?用 TaoToken 接 Codex 对照 PySide6 依赖查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 21:34:32

Deep-Live-Cam:3 次点击跑通实时 AI 换脸,5 分钟看懂原理

Deep-Live-Cam:3 次点击跑通实时 AI 换脸,5 分钟看懂原理 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam 视频通…

作者头像 李华
网站建设 2026/9/18 21:33:13

NocoBase 用户锁定实战:无效密码登录限制下的锁定与解锁管理

NocoBase 用户锁定实战:无效密码登录限制下的锁定与解锁管理 【免费下载链接】nocobase NocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-pr…

作者头像 李华
网站建设 2026/9/18 21:32:03

Module `0x2::TestViz` <a id=“0x2_TestViz“></a>

Module 0x2::TestViz 【免费下载链接】aptos-core Aptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience. 项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core 标题使用反引号包…

作者头像 李华