免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

RIOT OS 平台适配指南:STM32 Nucleo-F429ZI 开发板(nucleo-f429zi)

RIOT OS 平台适配指南:STM32 Nucleo-F429ZI 开发板(nucleo-f429zi) RIOT OS 平台适配指南STM32 Nucleo-F429ZI 开发板nucleo-f429zi【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT本文以 RIOT 仓库中 boards/nucleo-f429zi/doc.md 为主线系统讲解基于 STM32F429ZI 的 Nucleo-144 开发板在 RIOT OS 中的硬件规格、外设资源、引脚映射与烧录流程并结合 periph_conf.h 等源码深入剖析 UART、SPI、ADC、PWM、以太网等外设的底层配置帮助读者理解如何在 RIOT 中为该板卡编写与编译应用、访问串口 Shell 并正确接线。概述一块面向网络与多媒体应用的 Cortex-M4 开发板Nucleo-F429ZI 是 ST 半导体STMicroelectronicsNucleo 家族中基于ARM Cortex-M4F内核的开发板属于 RIOT 仓库中boards_common_nucleo144分组Nucleo-144 引脚排列标准。它搭载STM32F429ZI微控制器提供256KiB RAM与2MiB Flash主频最高可达180MHz并集成 FPU浮点运算单元、10/100Mbps 以太网 MAC 以及丰富的定时器、ADC、UART、I2C、SPI、CAN 等外设适合物联网网关、网络协议栈验证与多外设原型开发。在 RIOT 中该板卡被完整适配为名为nucleo-f429zi的 BOARD 目标。其板级定义分布在 boards/nucleo-f429zi 目录Makefile、Makefile.features、Makefile.include、Makefile.dep、Kconfig与include/periph_conf.h共同完成从 CPU 型号声明、外设特性声明到引脚复用的全部配置并复用 boards/common/nucleo144 与 boards/common/nucleo 的公共构建逻辑。硬件规格STM32F429ZI 核心资源一览根据 doc.md 中的 MCU 规格表Nucleo-F429ZI 的核心参数如下项目规格MCUSTM32F429ZI内核ARM Cortex-M4F厂商ST MicroelectronicsRAM256KiBFlash2MiB主频最高 180 MHzFPU支持硬件浮点以太网10/100 MbpsMAC RMII定时器17 个2 个看门狗、1 个 SysTick、2 个 32 位、12 个 16 位ADC3 个 12 位 ADC最多 24 通道UART4 个I2C3 个SPI6 个CAN2 个RTC1 个ST 官方为该芯片提供了数据手册Datasheet、参考手册Reference Manual即 RM0090、编程手册Programming ManualPM0214以及 Nucleo-144 板卡手册Board ManualUM1974/DM00244518在 doc.md 中均给出了对应文档链接开发时可作为寄存器级编程与引脚定义的权威参考。从板卡构建文件可以确认该 CPU 的适配方式Makefile.features 中声明CPU stm32、CPU_MODEL stm32f429ziRIOT 的 stm32 CPU 适配层会据此选择对应的启动文件、链接脚本与时钟配置Kconfig 则在 Kconfig 菜单系统中将BOARD_NUCLEO_F429ZI与CPU_MODEL_STM32F429ZI、BOARD_COMMON_NUCLEO144关联起来供menuconfig配置使用。板级特性与模块依赖外设特性声明Makefile.features 声明了该板提供的全部 RIOTperiph_*特性按字母序排列如下periph_adc模拟数字转换periph_dmaDMA 直接存储器访问periph_eth以太网periph_i2cI2C 总线periph_pwmPWM 输出periph_rtc实时时钟periph_spiSPI 总线periph_timer硬件定时器periph_uart串口periph_usbdevUSB 设备tinyusb_deviceTinyUSB 设备栈支持此外通过引入 boards/common/nucleo144/Makefile.features该板自动获得 Nucleo-144 公共特性arduino_analog、arduino_i2c、arduino_pins、arduino_spi、arduino_uart以及Arduino UNO / Mega 扩展板兼容arduino_shield_uno、arduino_shield_mega。这意味着应用可以直接使用ARDUINO_PIN_*与ARDUINO_A*宏编写跨板代码。默认网络模块Makefile.dep 定义了默认网络栈行为当应用使能netdev_default时构建系统会自动追加stm32_eth模块将 STM32 内置以太网 MAC 接入 RIOT 的 netdev 框架从而在未显式指定网卡的情况下直接获得以太网支持ifneq (,$(filter netdev_default,$(USEMODULE))) USEMODULE stm32_eth endif编程器与串口工具链boards/common/nucleo/Makefile.include 为所有 Nucleo 板卡统一配置了烧录与串口工具链通过makefiles/boards/stm32.inc.mk引入基于ST-Link的烧录器如openocd、stlink等配置串口选择使用MOST_RECENT_PORT1时TTY_BOARD_FILTER会按--model STM32 STLink过滤 USB 串口确保只选中板载 ST-Link 的虚拟串口同时声明DEBUG_ADAPTER_ID_IS_TTY_SERIAL : 1调试器 ID 即串口序列号并将cpy2remed加入PROGRAMMERS_SUPPORTED——该模式允许把固件拷贝到 ST-Link 挂载出的可移动磁盘目录名为NODEBOARD名大写例如NODENUCLEO_F429ZI实现拖拽烧录。引脚复用与外设布局periph_conf.h 深入解读板级外设映射集中定义在 include/periph_conf.h。该文件首先声明板载LSE低速外部晶振与 HSE高速外部晶振CONFIG_BOARD_HAS_LSE/CONFIG_BOARD_HAS_HSE随后引入 stm32 公共配置头periph_cpu.h、clk_conf.h以及 I2C1、TIM2/TIM5、USB OTG FS 的复用配置片段cfg_i2c1_pb8_pb9.h、cfg_timer_tim5_and_tim2.h、cfg_usb_otg_fs.h和mii.h以太网 MII/RMII 状态位定义。UARTST-Link 虚拟串口在 USART3该板共配置了 3 个 RIOT UART 设备RIOT 设备硬件外设TX 引脚RX 引脚总线/中断UART_DEV(0)USART3PD8AF7PD9AF7APB1 /USART3_IRQnUART_DEV(1)USART6PG14AF8PG9AF8APB2 /USART6_IRQnUART_DEV(2)USART2PD5AF7PD6AF7APB1 /USART2_IRQn关键点USART3PD8/PD9正是板载 ST-Link 虚拟串口VCP所连接的 UART。根据 boards/common/nucleo144/doc.mdRIOT Shell 的默认终端就是这块 VCP默认波特率1152008N1。因此UART_DEV(0)是运行make term连接 Shell 的默认设备。其余 USART2、USART6 分别对应 Arduino 排针 D0/D1 与 D16/D17 等位置供外接串口设备使用。SPISPI1 直连 Arduino D11/D12/D13periph_conf.h 配置了唯一的 SPI 设备SPI_DEV(0)SPI1MOSI PA7AF5MISO PA6AF5SCLK PA5AF5挂载于 APB2 总线RCC_APB2ENR_SPI1EN这与 boards/common/nucleo144/include/arduino_iomap.h 中的默认定义一致ARDUINO_SPI_D11D12D13即SPI_DEV(0)对应 Arduino UNO 排针 D13SCK、D12MISO、D11MOSI。使能MODULE_PERIPH_DMA后SPI1 还额外使用DMA2 Stream 3TX与 DMA2 Stream 2RX提升吞吐对应dma_config中的 stream 11 与 stream 10。ADC6 路模拟通道 内部 VBAT 通道periph_conf.h 明确说明并未把所有 ADC 通道全部映射而是按 Nucleo 的 Arduino 排针 A0–A5 定义 6 路通道并额外加入内部 VBAT 电池电压通道RIOT ADC 线引脚ADC 实例/通道对应排针ADC_LINE(0)PA3ADC2 / CH3A0ADC_LINE(1)PC0ADC2 / CH10A1ADC_LINE(2)PC3ADC2 / CH13A2ADC_LINE(3)PF3ADC2 / CH9A3ADC_LINE(4)PF5ADC2 / CH15A4ADC_LINE(5)PF10ADC2 / CH8A5ADC_LINE(6)内部ADC2 / CH18VBATVBAT 通道通过#define VBAT_ADC ADC_LINE(6)暴露应用可调用 RIOT 的adc_sample()直接读取板载电池电压。同时 arduino_iomap.h 将ARDUINO_A0~ARDUINO_A5依次映射到ADC_LINE(0)~ADC_LINE(5)与上表一一对应。PWMTIM1 与 TIM4 双通道组periph_conf.h 配置了两组 PWMPWM_DEV(0)TIM1APB23 路可用通道PE9cc_chan 0Arduino D6、PE11cc_chan 1D5、PE13cc_chan 2D3复用为 AF1PWM_DEV(1)TIM4APB11 路可用通道PD15cc_chan 3Arduino D9复用为 AF2。注TIM1 的第四个通道槽位引脚为GPIO_UNDEF未启用仅前 3 路可输出。以太网RMII 模式 DMA2 Stream 0periph_conf.h 配置了 STM32 内置以太网 MACstm32_eth采用RMII 模式默认速率/双工为MII_BMCR_SPEED_100 | MII_BMCR_FULL_DPLX100Mbps 全双工PHY 地址0x00DMA 使用 DMA2 Stream 0即dma_config中的 stream 8中断ETH_DMA_ISR。RMII 所需引脚包括 PG13RMII_TXD0、PB13RMII_TXD1、PG11RMII_TX_EN、PC4RMII_RXD0、PC5RMII_RXD1、PA7RMII_CRS_DV、PC1RMII_MDC、PA2RMII_MDIO、PA1RMII_REF_CLK等与 Nucleo-144 板载 LAN8742A PHY 的默认接法一致。启用netdev_default后即可通过gnrc_netif使用该网卡。DMA 流分配一览综合dma_configperiph_conf.h可归纳 DMA 占用索引DMA2 Stream用途DMA_0_ISRStream 3SPI1_TXDMA_1_ISRStream 2SPI1_RXDMA_2_ISRStream 0ETH_TX / ETH_DMAUART 的 DMA 字段在未单独配置时置为DMA_STREAM_UNDEF即默认不启用串口 DMA。Arduino 引脚兼容映射通过 boards/common/nucleo144/include/arduino_iomap.hNucleo-F429ZI 提供完整的 Arduino 排针映射F429ZI 走CPU_FAM_STM32F4默认分支D0/D1PG9 / PG14即 USART6ARDUINO_UART_D0D1 UART_DEV(1)D2–D13PF15、PE13、PF14、PE11、PE9、PF13、PF12、PD15、PD14、PA7、PA6、PA5D14/D15PB9 / PB8I2C1 的 SDA/SCLARDUINO_I2C_UNO I2C_DEV(0)来自cfg_i2c1_pb8_pb9.hD16–D21 / A0–A5PA3、PC0、PC3、PF3、PF5、PF10。这些宏让基于arduino_*特性的应用如arduino_analog、arduino_i2c、arduino_spi可以不加修改地在不同 Nucleo-144 板卡间迁移。烧录与串口调试从编译到 Shell 交互刷写板卡doc.md 指出刷写流程的详细说明见 STM32 板卡专属指南并强调该板在 RIOT 中的 BOARD 名为nucleo-f429zi。因此典型用法是在应用目录如 examples/basic 下的 hello-world执行make BOARDnucleo-f429zi flash termflash目标会通过 ST-LinkOpenOCD 等已配置的 PROGRAMMER烧写固件若使用cpy2remed编程器则只需将构建产物拷贝到 ST-Link 挂载的可移动磁盘NODENUCLEO_F429ZI即可完成拖拽烧录多块板卡同时接入时可用MOST_RECENT_PORT1让系统按STM32 STLink型号自动筛选最新串口。访问 RIOT Shell依据 boards/common/nucleo144/doc.mdShell 复用板载ST-Link VCP用 USB 线连接 Nucleo-F429ZI 的 ST-Link 接口与电脑系统出现/dev/ttyACM*等虚拟串口执行make term或手动连接串口工具参数为115200 baud、8 数据位、无校验、1 停止位8N1在 Shell 中即可使用help查看可用命令、ifconfig查看网络接口、ps查看线程等标准 RIOT Shell 命令。需要说明的是USART3PD8/PD9承载了 VCP 数据但用户应用的stdio默认会由构建系统根据板卡配置指向该串口应用开发者通常无需关心具体寄存器若需在 PD8/PD9 上复用其他功能则应查阅 periph_conf.h 的 UART 表做相应调整。在 RIOT 中使用 Nucleo-F429ZI 的实操建议最小应用验证编译并烧录 hello-worldmake BOARDnucleo-f429zi -C examples/basic/hello-world flash term确认串口输出与 Shell 交互正常网络功能运行 examples/networking/gnrc_networking 等示例构建系统会自动拉入stm32_ethifconfig应能看到以太网接口并通过 DHCP/静态 IP 通信模拟量采集使用periph_adc读取ADC_LINE(0)A0或VBAT_ADC监测电源扩展板兼容利用arduino_shield_uno/arduino_shield_mega特性直接插接常见 Arduino 盾板配合ARDUINO_PIN_*宏编程低功耗/时钟板载 HSE 与 LSE 均已声明CONFIG_BOARD_HAS_HSE/CONFIG_BOARD_HAS_LSERTC 与periph_rtc可使用 LSE 作为低速时钟源适合时间敏感应用。小结Nucleo-F429ZI 是 RIOT 生态中一款功能全面的 Cortex-M4 开发板nucleo-f429zi板级定义通过 Makefile.features、Makefile.dep 与 include/periph_conf.h 完整暴露了 UART、SPI、ADC、PWM、I2C、以太网、USB 等外设并借助 Nucleo-144 公共层获得 Arduino 兼容与统一的 ST-Link 烧录/串口体验。开发者只需make BOARDnucleo-f429zi即可将其纳入 RIOT 的构建与测试流程快速开展网络协议、传感采集与多媒体类物联网应用的原型验证。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表