资讯动态

RIOT OS 板级支持详解:STM32 Nucleo-G071RB(nucleo-g071rb)开发板

发布时间:2026/9/18 16:30:15 来源:尧图企业网站定制
RIOT OS 板级支持详解STM32 Nucleo-G071RBnucleo-g071rb开发板【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT本篇技术指南以 RIOT 操作系统中nucleo-g071rb板级支持包为核心系统讲解 STM32 Nucleo-G071RB 开发板的硬件规格、引脚布局、RIOT 外设抽象层periph的实际配置、Arduino 兼容性以及刷写与串口使用流程。读完本文你将掌握如何用 RIOT 在该板卡上声明特性、配置 UART/SPI/ADC/Timer 外设并基于板级源码快速上手开发。开发板概览Nucleo-G071RB 是意法半导体STNucleo 家族中的一块开发板属于 Nucleo-64 板型板卡尺寸与引脚间距遵循 ARDUINO UNO R3 兼容布局。它搭载的是基于ARM Cortex-M0内核的STM32G071RB微控制器配备36KiB RAM与128KiB Flash是 STM32G0 系列中面向低功耗、低成本物联网与工业控制场景的主流型号。在 RIOT 源码树中该板的板级定义位于 boards/nucleo-g071rb并在 boards/nucleo-g071rb/doc.md 中以 Doxygen 页面defgroup boards_nucleo-g071rb的形式对外发布文档。该板归属于boards_common_nucleo64组因此同时继承了 boards/common/nucleo64/doc.md 中所有 Nucleo-64 板的公共说明。关于 Nucleo-64 全系列的公共特性与注意事项可查阅 boards/common/nucleo64/doc.md。核心 MCU 规格根据板级文档STM32G071RB 微控制器的主要规格如下表所示项目规格MCUSTM32G071RB内核家族ARM Cortex-M0厂商ST MicroelectronicsRAM36KiBFlash128KiB最高主频64 MHz定时器14 个2 个看门狗、1 个 SysTick、10 个 16 位、1 个 32 位ADC1 个 12 位最多 16 通道UART5 个4 个 USART 1 个低功耗 UARTI2C2 个SPI2 个RTC1 个数据手册STM32G071RB Datasheet参考手册RM0454STM32G0x0 系列编程手册PM0223STM32 Cortex-M0 MCUs板卡手册UM2324STM32 Nucleo-64 boards, MB1360其中 12 位 ADC 在板级配置中实际启用了 6 个 Arduino 模拟通道A0–A5外加 1 个内部 VBAT 监测通道详见下文外设配置小节5 个 UART 中的 4 个 USART 可通过 RIOT 的 periph_uart 抽象使用板载 ST-Link 虚拟串口即挂在其中一个 USART 上。引脚分布Pinout该板沿用了 ST Nucleo-64MB1360 板型的引脚布局。ST 官方在板卡手册 UM2324 第 34 页给出了 Nucleo-G070RB 与 Nucleo-G071RB 共用的引脚图引脚图同样适用于 G070RB 型号二者差异主要在 Flash/RAM 容量与外设细节。用户手册中的引脚分配表Table 12第 30 页对每个 Arduino 接口引脚标注了形如ARD_A[N]_IN[X]的 ADC 映射信息其中[N]为模拟引脚编号、[X]为从 1 起始的 ADC 通道号例如ARD_A5_IN16表示模拟引脚 A5 对应 ADC 通道 16这一标注方式是 RIOT 板级配置中确定 ADC 通道映射的直接依据。板载外设与按钮/LED用户按键 BTN0默认接在PC13上配置为上拉输入GPIO_IN_PU板载 LED0默认接在PA5上见 boards/common/nucleo64/include/board.hST-Link 调试器板载 ST-Link 除烧录/调试外还提供虚拟串口VCP。RIOT 板级支持包结构nucleo-g071rb板级目录共包含 7 个文件职责划分清晰文件作用Makefile声明MODULE board并引入公共的$(RIOTBOARD)/common/nucleo目录Makefile.features声明 CPU 型号与板级提供的特性featuresMakefile.include引入 boards/common/nucleo64/Makefile.includeMakefile.dep引入公共依赖$(RIOTBOARD)/common/nucleo64/Makefile.depKconfigKconfig 菜单中注册BOARD_NUCLEO_G071RB并选择 CPU 型号include/periph_conf.h外设timer/uart/adc/spi 等的具体引脚与时钟配置doc.md板级 Doxygen 文档特性声明与依赖Makefile.features 首先指定了 CPU 与 CPU 型号CPU stm32 CPU_MODEL stm32g071rb随后声明该板对外提供的外设特性字母序FEATURES_PROVIDED periph_adc FEATURES_PROVIDED periph_i2c FEATURES_PROVIDED periph_rtt FEATURES_PROVIDED periph_spi FEATURES_PROVIDED periph_timer FEATURES_PROVIDED periph_uart FEATURES_PROVIDED riotbootperiph_*特性表示应用可以无条件使用对应的 RIOT 外设抽象接口adc、i2c、rtt、spi、timer、uartriotboot特性说明该板支持 RIOT 的 riotboot 启动引导机制可配合riotboot_dfu等引导程序实现应用固件在线升级。此外公共的 boards/common/nucleo64/Makefile.features 还补充声明了 Arduino 生态相关的特性FEATURES_PROVIDED arduino_analog FEATURES_PROVIDED arduino_i2c FEATURES_PROVIDED arduino_pins FEATURES_PROVIDED arduino_shield_uno FEATURES_PROVIDED arduino_spi FEATURES_PROVIDED arduino_uart这意味着该板可直接兼容 UNO R3 型 Arduino 扩展板shield并通过arduino_*抽象访问模拟输入、I2C、SPI、UART 与引脚映射。在 Kconfig 一侧Kconfig 完成等价声明config BOARD default nucleo-g071rb if BOARD_NUCLEO_G071RB config BOARD_NUCLEO_G071RB bool default y select BOARD_COMMON_NUCLEO64 select CPU_MODEL_STM32G071RB即选择nucleo-g071rb会自动选中 Nucleo-64 公共支持与stm32g071rbCPU 型号。外设配置详解periph_conf.h板级外设的具体引脚、时钟与中断配置集中在 boards/nucleo-g071rb/include/periph_conf.h 中下面逐项展开。时钟与 RTC文件头部定义#ifndef CONFIG_BOARD_HAS_LSE #define CONFIG_BOARD_HAS_LSE 1 #endif声明该板带有低速外部晶振LSE通常为 32.768 kHz因此 RTC 可以使用 LSE 保持低功耗计时。同时文件引入了clk_conf.h、cfg_i2c1_pb8_pb9.h与cfg_rtt_default.h#include clk_conf.h #include cfg_i2c1_pb8_pb9.h #include cfg_rtt_default.hclk_conf.h提供 STM32 通用时钟配置由 cpu/stm32 提供cfg_i2c1_pb8_pb9.h将 I2C1 映射到PB8/PB9引脚cfg_rtt_default.h提供 RTTReal-Time Timer的默认配置对应特性声明中的periph_rtt。Timer 配置板级只暴露一个 RIOT 定时器设备使用TIM3static const timer_conf_t timer_config[] { { .dev TIM3, .max 0x0000ffff, /* 16 位定时器最大计数值 65535 */ .rcc_mask RCC_APBENR1_TIM3EN, .bus APB1, .irqn TIM3_IRQn } }; #define TIMER_0_ISR isr_tim3 #define TIMER_NUMOF ARRAY_SIZE(timer_config).max 0x0000ffff对应 STM32G071RB 上 16 位通用定时器的计数上限中断服务程序绑定到isr_tim3由 RIOT 的timer模块统一分发。UART 配置板级配置了2 个 UART 设备static const uart_conf_t uart_config[] { { .dev USART2, /* ST-Link 虚拟串口 */ .rcc_mask RCC_APBENR1_USART2EN, .rx_pin GPIO_PIN(PORT_A, 3), .tx_pin GPIO_PIN(PORT_A, 2), .rx_af GPIO_AF1, .tx_af GPIO_AF1, .bus APB1, .irqn USART2_IRQn, }, { /* Arduino pinout on D0/D1 */ .dev USART1, .rcc_mask RCC_APBENR2_USART1EN, .rx_pin GPIO_PIN(PORT_C, 5), /* Arduino D0 */ .tx_pin GPIO_PIN(PORT_C, 4), /* Arduino D1 */ .rx_af GPIO_AF1, .tx_af GPIO_AF1, .bus APB12, .irqn USART1_IRQn, }, }; #define UART_0_ISR (isr_usart2) #define UART_1_ISR (isr_usart1)UART 0USART2PA2/PA3板载 ST-Link 虚拟串口VCP所挂载的串口RIOT shell 默认通过它输出UART 1USART1PC4/PC5映射到 Arduino 的D0/D1引脚便于在扩展板上直接使用串口。两者均使用复用功能GPIO_AF1并分别挂接在 APB1 与 APB12 总线上。对应地公共文档 boards/common/nucleo64/doc.md 明确指出不同 Nucleo 变体的 VCP 串口各不相同具体以各板的include/periph_conf.h为准RIOT shell 默认波特率为1152008N1。SPI 配置板级暴露1 个 SPI 设备SPI1与 Arduino 引脚对齐static const spi_conf_t spi_config[] { { .dev SPI1, .mosi_pin GPIO_PIN(PORT_A, 7), /* Arduino D11 */ .miso_pin GPIO_PIN(PORT_A, 6), /* Arduino D12 */ .sclk_pin GPIO_PIN(PORT_A, 5), /* Arduino D13 */ .cs_pin GPIO_UNDEF, /* 片选由用户自行控制 */ .mosi_af GPIO_AF0, .miso_af GPIO_AF0, .sclk_af GPIO_AF0, .cs_af GPIO_AF0, .rccmask RCC_APBENR2_SPI1EN, .apbbus APB12, }, }; #define SPI_NUMOF ARRAY_SIZE(spi_config)其中 MOSI/MISO/SCLK 分别对应 Arduino 的 D11/D12/D13片选引脚cs_pin被置为GPIO_UNDEF即 CS 由用户在应用层自行管理可自由选择任意 GPIO 作为片选。ADC 配置与 VBAT 监测板级按 Nucleo Arduino 头 A0–A5 顺序定义了6 个外部 ADC 通道 1 个内部 VBAT 通道static const adc_conf_t adc_config[] { { .pin GPIO_PIN(PORT_A, 0), .dev 0, .chan 0 }, /* ARD_A0_IN0 */ { .pin GPIO_PIN(PORT_A, 1), .dev 0, .chan 1 }, /* ARD_A1_IN1 */ { .pin GPIO_PIN(PORT_A, 4), .dev 0, .chan 4 }, /* ARD_A2_IN4 */ { .pin GPIO_PIN(PORT_B, 1), .dev 0, .chan 9 }, /* ARD_A3_IN9 */ { .pin GPIO_PIN(PORT_B, 11), .dev 0, .chan 15 }, /* ARD_A4_IN15 */ { .pin GPIO_PIN(PORT_B, 12), .dev 0, .chan 16 }, /* ARD_A5_IN16 */ { .pin GPIO_UNDEF, .dev 0, .chan 14}, /* VBAT */ }; #define VBAT_ADC ADC_LINE(6) /** VBAT ADC line */ #define ADC_NUMOF ARRAY_SIZE(adc_config)源码注释给出了重要的设计说明并未配置 STM32G071 的全部 ADC 通道也未按芯片通道顺序排列而是按 Nucleo Arduino 头的 A0–A5 顺序选择了 6 个通道保证与 Arduino 生态的模拟引脚习惯一致通道号与板卡手册 UM2324Table 12第 30 页的ARD_A[N]_IN[X]标注一致例如 A5 对应通道 16VBAT 通道GPIO_UNDEF无外部引脚通过内部电压分压电路采样实际只测得 VBAT 的1/3从而允许供电电压高于 ADC 参考电压相关细节可参考 MCU 数据手册中 Vbat battery voltage monitoring 一节。RIOT 中通过ADC_LINE(6)宏将 VBAT 暴露为第 7 条 ADC 线索引 6。I2C 与 Arduino 引脚映射I2C1 通过cfg_i2c1_pb8_pb9.h固定映射到PB8SCL/PB9SDA这与 Nucleo-64 的 Arduino I2C 引脚D14/D15一致配合 boards/common/nucleo64/Makefile.features 中声明的arduino_i2c、arduino_analog等特性应用可直接通过arduino_*封装访问。Nucleo-64 公共板级支持由于该板归属于boards_common_nucleo64组还继承了以下公共能力LED0 与按键 BTN0boards/common/nucleo64/include/board.h 定义了统一的 LED 与按键映射LED0PA5LED0_PORT GPIO_PORT_A、LED0_PIN_NUM 5注意此引脚同时是 SPI1 的 SCLKD13BTN0PC13对于 G071RB 等默认型号为GPIO_IN_PU上拉输入公共头文件还预设了MRF24J40IEEE 802.15.4 射频模块的参数默认值SPI0、5MHz 时钟、CS 在 Arduino D10、INT 在 D7、RESET 在 D5便于直接挂接该射频扩展板。SPI 与 LED0 的引脚冲突警告公共文档 boards/common/nucleo64/doc.md 特别提醒在 Nucleo-64 板卡上SPI 外设与 LED0 不能同时使用二者共用 PA5/SCLK 引脚。若应用中启用了periph_spi编译期会给出如下警告Warning: Using periph_spi on Nucleo64 boards will disable LED0 due to pin conflicts.设计板载 LED 指示或编写 SPI 驱动时应留意这一冲突必要时改用外接 GPIO 控制 LED。刷写Flashing与串口 Shell刷写方式板级文档将刷写细节指向 RIOT 官方 STM32 板卡刷写指南板名固定为nucleo-g071rb。在应用目录下执行make BOARDnucleo-g071rb flash烧录走板载ST-LinkRIOT 的stm32CPU 刷写工具链会识别并调用 ST-Link 完成下载与复位若使用 riotboot则刷写命令通常为make BOARDnucleo-g071rb riotboot/flash或通过riotboot_dfu以 DFU 方式升级。访问 RIOT ShellRIOT 的默认 shell 通过板载ST-Link VCP虚拟串口访问即上文 UART 0USART2PA2/PA3。连接参数为波特率115200数据位/校验/停止位8N1在宿主机上可使用任意串口终端如screen /dev/ttyACM0 115200或minicom -D /dev/ttyACM0 -b 115200打开该虚拟串口即可进入 RIOT shell 交互。快速上手示例结合 examples 目录中的现成示例可以用最简单的命令验证板卡# 编译并烧录 hello-world cd examples/hello-world make BOARDnucleo-g071rb flash termterm目标会自动以 115200 8N1 打开 ST-Link 虚拟串口串口上将打印 RIOT 的欢迎信息与 shell 提示符。在此基础上如需验证 SPI、ADC 或 I2C可以分别查看 examples/advanced、drivers 与 sys/saul 中对应的示例与测试用例结合上文periph_conf.h的引脚映射直接开展开发。小结nucleo-g071rb是 RIOT 对 STM32G0 系列支持的重要板级实现它以最小的板级文件特性声明 外设配置 Kconfig 注册复用了完整的 Nucleo-64 公共支持并通过periph_adc/periph_spi/periph_uart/periph_i2c/periph_timer/periph_rtt六大外设抽象与riotboot引导机制为开发者提供了开箱即用的 Cortex-M0 物联网开发平台。理解 boards/nucleo-g071rb/include/periph_conf.h 中的引脚映射与 boards/common/nucleo64/doc.md 的公共约定即可在 Nucleo-G071RB 上高效完成外设驱动与应用开发。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价