RIOT OS 中的 STM32F429I-DISC1 开发板支持:外设配置、引脚定义与烧录指南

发布时间:2026/9/18 23:30:08
RIOT OS 中的 STM32F429I-DISC1 开发板支持:外设配置、引脚定义与烧录指南
RIOT OS 中的 STM32F429I-DISC1 开发板支持外设配置、引脚定义与烧录指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT本指南以 RIOT OS 仓库中的 boards/stm32f429i-disc1/doc.md 为骨架结合该板卡目录下的外设配置、构建脚本与 Kconfig 定义系统讲解 STM32F429I-DISC1ST Discovery 系列在 RIOT 中的支持情况。读完本文你将掌握该板卡的 MCU 资源全貌、板载外设的 GPIO 映射、如何查看外设时钟与 FMC/SDRAM 配置、如何通过 OpenOCD 烧录以及如何在 RIOT 应用中启用板载 LCD、触摸屏、陀螺仪等模块。板卡概述从 STM32F429I-DISCO 到 STM32F429I-DISC1STM32F429I-DISC1 是 ST 公司 Discovery 系列中的一款开发板搭载 ARM Cortex-M4F 内核的STM32F429ZI微控制器拥有256 KiB RAM与2 MiB Flash。在 RIOT 中它是老款 STM32F429I-DISCO 的替代型号两者在板级定义上存在继承关系但 DISCO 版本目前在仓库中仅保留了Makefile.features、Makefile.dep、Makefile.include与 doc.md 等精简骨架社区已把主开发精力转移到 DISC1 上。RIOT 中该板卡的名称BOARD 值为stm32f429i-disc1对应board模块位于 boards/stm32f429i-disc1。编译任何面向该板卡的 RIOT 应用时都使用BOARDstm32f429i-disc1 make -C examples/hello-world flash term其中flash目标负责烧录term目标打开串口终端查看输出详见后文烧录章节。MCU 资源总览原文档给出了该板卡所使用 MCU 的完整资源表这是理解后续外设配置的基础项目参数MCUSTM32F429ZI内核家族ARM Cortex-M4F厂商ST MicroelectronicsRAM256 KiBFlash2 MiB主频最高 180 MHzRIOT 中设为 180 MHzRIOT 默认主频180 MHzFPU支持硬件浮点以太网10/100 Mbps定时器17 个2 个看门狗、1 个 SysTick、2 个 32 位、12 个 16 位ADC3 个 12 位最多 24 通道UART4I2C3SPI6CAN2RTC1该表同时对应 STM32F429ZI Datasheet、RM0090 参考手册、PM0214 编程手册 以及 UM1670 板卡手册后文的外设配置细节均可在这些官方资料中找到寄存器级依据。说明RIOT 的板级支持以 CPU 型号为粒度组织。在 boards/stm32f429i-disc1/Makefile.features 中通过CPU stm32、CPU_MODEL stm32f429zi声明了该板卡所依赖的 CPU 与型号实际的外设驱动实现则位于 cpu/stm32 与 drivers/periph_common。引脚布局Pinout原文档引用 stm32f429i-disc1.svg 展示板卡底面引脚布局图出自 STM 用户手册 UM1607 第 12 页注意文档中给出的实际 PDF 链接为 UM1670。该图对硬件接线至关重要——在使用 SAUL、SPI、I2C 等模块前务必对照引脚图确认信号与 GPIO 端口的对应关系。RIOT 侧外设使能features 与依赖解析在 boards/stm32f429i-disc1/Makefile.features 中该板卡向 RIOT 的 feature 系统声明了以下能力按字母序FEATURES_PROVIDED periph_dma FEATURES_PROVIDED periph_fmc FEATURES_PROVIDED periph_fmc_16bit FEATURES_PROVIDED periph_fmc_sdram FEATURES_PROVIDED periph_i2c FEATURES_PROVIDED periph_spi FEATURES_PROVIDED periph_timer FEATURES_PROVIDED periph_uart FEATURES_PROVIDED periph_usbdev FEATURES_PROVIDED periph_usbdev_hs FEATURES_PROVIDED riotboot其中periph_fmc、periph_fmc_16bit、periph_fmc_sdram表明板载FMC 外部存储器控制器与64 Mbit SDRAM型号 IS42S16400J-7TL可用periph_usbdev与periph_usbdev_hs表明 USB OTG HS 外设可用riotboot表明该板卡支持 RIOT 的 bootloader 机制当目标板卡确为stm32f429i-disc1时额外提供tinyusb_devicefeature见该文件末尾的ifneq判断供 pkg/tinyusb 使用。Makefile.dep 则描述了模块间的自动依赖ifneq (,$(filter periph_usbdev,$(USEMODULE))) USEMODULE periph_usbdev_hs endif ifneq (,$(filter periph_fmc,$(USEMODULE))) FEATURES_REQUIRED periph_fmc_16bit endif ifneq (,$(filter saul_default,$(USEMODULE))) USEMODULE saul_gpio USEMODULE l3gxxxx endif ifneq (,$(filter disp_dev,$(USEMODULE))) USEMODULE ili9341 endif ifneq (,$(filter touch_dev,$(USEMODULE))) USEMODULE stmpe811_i2c endif ifneq (,$(filter l3gxxxx,$(USEMODULE))) USEMODULE i3g4250d USEMODULE l3gd20 USEMODULE l3gxxxx_spi endif从源码结构可以清晰地看到该板卡板载外设与 RIOT 模块的映射关系使用saul_defaultSAUL 默认传感器注册时自动启用saul_gpio与陀螺仪驱动l3gxxxx使用disp_dev显示设备抽象时自动启用ILI9341 LCD 控制器驱动使用touch_dev触摸设备抽象时自动启用STMPE811 触摸控制器驱动I2C 接口l3gxxxx又进一步展开为i3g4250d、l3gd20与l3gxxxx_spi对应板载的L3GD20Rev. B01/C01或 I3G4250DRev. D02/E01三轴陀螺仪。板载外设引脚映射board.hboards/stm32f429i-disc1/include/board.h 集中定义了板级资源LED板上有两颗用户可控 LED均挂在 GPIOG 端口可通过宏直接控制宏端口引脚号板载丝印LED0_PINLED0_PIN_NUM13,LED0_PORT_NUMPORT_GGPIOG13LD3绿色LED1_PINLED1_PIN_NUM14,LED1_PORT_NUMPORT_GGPIOG14LD4红色RIOT 的标准 LED 接口宏LED0_ON/LED0_OFF/LED0_TOGGLE等通过 stm32_leds.h 提供应用代码可直接使用。用户按键#define BTN0_PIN GPIO_PIN(PORT_A, 0) /** GPIO used for BTN0 */ #define BTN0_MODE GPIO_IN用户按键 BTN0丝印 USER接在 PA0配置为输入模式。板载陀螺仪 L3GD20 / I3G4250D#define L3GXXXX_SPI_DEV SPI_DEV(0) /** SPI 总线 */ #define L3GXXXX_SPI_CS GPIO_PIN(PORT_C, 1) /** SPI CS 引脚 */ #define L3GXXXX_INT1_PIN GPIO_PIN(PORT_A, 1) /** INT1 引脚 */ #define L3GXXXX_INT2_PIN GPIO_PIN(PORT_A, 2) /** INT2/DRDY 引脚 */陀螺仪挂在SPI0 总线上片选 PC1中断引脚为 PA1/PA2。不同硬件版本Rev. B01/C01 为 L3GD20Rev. D02/E01 为 I3G4250D通过 Makefile.dep 自动选择对应驱动模块。触摸屏 STMPE811#define STMPE811_PARAM_XYCONV (STMPE811_MIRROR_Y | STMPE811_SWAP_XY)板载 STMPE811 触摸控制器在 RIOT 中使用stmpe811_i2c驱动坐标转换参数XYCONV做了 Y 轴镜像与 X/Y 交换以匹配 LCD 的实际安装方向。外设时钟与总线配置periph_conf.hboards/stm32f429i-disc1/include/periph_conf.h 是 RIOT 中该板卡外设配置的核心声明了板载HSE外部高速晶振与 LSE外部低速晶振#ifndef CONFIG_BOARD_HAS_LSE #define CONFIG_BOARD_HAS_LSE 1 #endif #ifndef CONFIG_BOARD_HAS_HSE #define CONFIG_BOARD_HAS_HSE 1 #endif同时通过 Kconfig 中的select BOARD_HAS_HSE/select BOARD_HAS_LSE与时钟配置联动。该文件引用了periph_cpu.h、clk_conf.h、cfg_timer_tim5.h32 位 TIM5 定时器与cfg_usb_otg_hs_phy_fs.hUSB OTG HS 使用 FS PHY 的预配置。UART该板卡默认仅配置 1 个 UARTUSART1用于 RIOT 的 stdio 与 shellstatic const uart_conf_t uart_config[] { { .dev USART1, .rcc_mask RCC_APB2ENR_USART1EN, .rx_pin GPIO_PIN(PORT_A, 10), .tx_pin GPIO_PIN(PORT_A, 9), .rx_af GPIO_AF7, .tx_af GPIO_AF7, .bus APB2, .irqn USART1_IRQn, #ifdef MODULE_PERIPH_DMA .dma DMA_STREAM_UNDEF, .dma_chan UINT8_MAX, #endif } }; #define UART_0_ISR (isr_usart1) #define UART_NUMOF ARRAY_SIZE(uart_config)要点串口引脚为PA9TX/ PA10RX复用功能 AF7挂在APB2总线上默认不启用 DMADMA_STREAM_UNDEF仅当编译时使能MODULE_PERIPH_DMA才保留 DMA 字段板载ST-Link将该串口桥接为 USB 虚拟串口即make term时连接的设备。SPI默认配置 1 个 SPISPI5专用于板载外设陀螺仪等static const spi_conf_t spi_config[] { { .dev SPI5, .mosi_pin GPIO_PIN(PORT_F, 9), .miso_pin GPIO_PIN(PORT_F, 8), .sclk_pin GPIO_PIN(PORT_F, 7), .cs_pin GPIO_UNDEF, /* CS 由驱动层管理如 L3GXXXX_SPI_CS */ .mosi_af GPIO_AF5, .miso_af GPIO_AF5, .sclk_af GPIO_AF5, .cs_af GPIO_AF5, .rccmask RCC_APB2ENR_SPI5EN, .apbbus APB2, #ifdef MODULE_PERIPH_DMA .tx_dma 0, .tx_dma_chan 7, .rx_dma 1, .rx_dma_chan 7, #endif } }; #define SPI_NUMOF ARRAY_SIZE(spi_config)SPI5 引脚为PF7SCLK/ PF8MISO/ PF9MOSI复用 AF5挂 APB2 总线。注意cs_pin为GPIO_UNDEF片选由上层驱动如陀螺仪的L3GXXXX_SPI_CS单独指定。该配置还引用了 periph_conf.h 顶部定义的 DMA 流dma_config[]中 stream 14 对应 DMA2 Stream 6 用于 SPI5_TXstream 13 对应 DMA2 Stream 5 用于 SPI5_RX使能periph_dma后 SPI 传输可走 DMA。I2C默认配置 1 个 I2CI2C3供 STMPE811 触摸控制器等 I2C 外设使用static const i2c_conf_t i2c_config[] { { .dev I2C3, .speed I2C_SPEED_NORMAL, .scl_pin GPIO_PIN(PORT_A, 8), .sda_pin GPIO_PIN(PORT_C, 9), .scl_af GPIO_AF4, .sda_af GPIO_AF4, .bus APB1, .rcc_mask RCC_APB1ENR_I2C3EN, .clk CLOCK_APB1, .irqn I2C3_EV_IRQn, } }; #define I2C_0_ISR isr_i2c3_ev #define I2C_NUMOF ARRAY_SIZE(i2c_config)I2C3 引脚为PA8SCL/ PC9SDA复用 AF4挂 APB1 总线速率模式为I2C_SPEED_NORMAL100 kHz。FMC 与板载 SDRAM该板卡最具特色的资源之一是FMC 外部存储器控制器与板载64 Mbit SDRAMIS42S16400J-7TL。periph_conf.h 给出了完整的 FMC 引脚与 SDRAM 时序配置地址线 A0–A1112 位行地址数据线 D0–D1516 位字节使能 NBL0/NBL1控制信号BA0/BA1、SDCLK、SDNWE、SDNRAS、SDNCAS、SDCKE1、SDNE1全部使用GPIO_AF12复用SDRAM 连接在Bank 6映射地址0xd0000000容量按MiB(8)4M × 16 bit配置关键时序参数clk_period 2SDCLK 2 × HCLK、cas_latency 3、行/列地址位 12/8、刷新周期 64 ms 等。FMC 配置由MODULE_PERIPH_FMC_SDRAM、MODULE_PERIPH_FMC_16BIT两个编译开关控制见代码中的#if块。在 Makefile.include 中还有对应的链接器内存布局定义FMC_RAM_ADDR0xd0000000 FMC_RAM_LEN8192K这表示 RIOT 的链接脚本会额外把 SDRAM 的 8 MiB 地址空间暴露给系统使用如mtd、外部堆或文件系统挂载点。SAUL 外设注册gpio_params.hboards/stm32f429i-disc1/include/gpio_params.h 把板载 LED 与按键注册进 SAUL 外设框架供saulshell 命令枚举与读写static const saul_gpio_params_t saul_gpio_params[] { { .name LD3 (green), .pin LED0_PIN, .mode GPIO_OUT }, { .name LD4 (red), .pin LED1_PIN, .mode GPIO_OUT }, { .name BTN USER, .pin BTN0_PIN, .mode BTN0_MODE }, };启用saul_default后运行 RIOT shell 中的saul命令即可看到LD3 (green)、LD4 (red)、BTN USER三个条目其中 LED 为OUT类可写按键为IN类可读这是验证板卡 SAUL 栈是否工作最简单的途径。烧录与调试FlashingSTM32F429I-DISC1 板载ST-Link 调试器因此 RIOT 默认使用OpenOCD作为烧录工具链。Makefile.include 中明确声明PROGRAMMER ? openocd OPENOCD_DEBUG_ADAPTER ? stlink PROGRAMMERS_SUPPORTED openocd烧录方法在任意应用目录下BOARDstm32f429i-disc1 make flash如果系统中有多个调试器或需要指定 OpenOCD 接口配置可通过变量覆盖例如BOARDstm32f429i-disc1 OPENOCD_DEBUG_ADAPTERstlink make flash打开串口终端ST-Link 虚拟串口BOARDstm32f429i-disc1 make term此外由于板卡声明了riotbootfeature也支持 RIOT 的 riotboot 双分区升级机制。更详细的 STM32 板卡烧录说明可参考 RIOT 指南中 board_specific/stm32 相关内容。在应用中启用板载外设综合 Makefile.dep 与各驱动模块在应用Makefile中可按需声明以下模块# 基础SAUL 板载陀螺仪自动展开 l3gxxxx、i3g4250d/l3gd20、l3gxxxx_spi USEMODULE saul_default # 显示ILI9341 LCD自动展开 ili9341 与 disp_dev USEMODULE disp_dev # 触摸STMPE811自动展开 stmpe811_i2c 与 touch_dev USEMODULE touch_dev # 外部 SDRAM / FMC自动要求 periph_fmc_16bit USEMODULE periph_fmc_sdram # USB 设备自动展开 periph_usbdev_hs USEMODULE periph_usbdev # 串口 / SPI / I2C 外设抽象 USEMODULE periph_uart periph_spi periph_i2c编译运行BOARDstm32f429i-disc1 make -C examples/hello-world flash term小结围绕 boards/stm32f429i-disc1/doc.md 这一板卡文档结合 periph_conf.h、board.h、gpio_params.h 及三个 Makefile 与 Kconfig可以看出 STM32F429I-DISC1 在 RIOT 中是一块外设覆盖相当全面的评估板180 MHz Cortex-M4F、硬件 FPU、USART1 串口ST-Link 桥接、SPI5 驱动的板载陀螺仪、I2C3 驱动的触摸屏、ILI9341 LCD以及通过 FMC 连接的 8 MiB 板载 SDRAM。开发者只要正确设置BOARDstm32f429i-disc1并在应用 Makefile 中声明对应模块即可自动获得完整的外设驱动与依赖解析快速投入原型开发。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考