资讯动态

RT-Thread 与 Arduino 生态兼容实战:STM32L475 潘多拉开发板(ATK-Pandora)RTduino 引脚排布全解析

发布时间:2026/9/28 2:43:51 来源:尧图企业网站定制
操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载本篇技术指南以 RT-Thread 仓库中 STM32L475 潘多拉 BSP 的 Arduino 引脚排布说明 为骨架系统讲解如何在该开发板上开启 RTduinoRT-Thread 的 Arduino 生态兼容层、理解 Arduino 引脚与 STM32 引脚的映射关系以及如何直接用 Arduino 风格的pinMode、digitalWrite、analogRead、analogWrite、Wire、SPI、Serial等 API 操作板载外设。读完本文你将掌握潘多拉板 40 路数字引脚D0–D39、4 路模拟输入A0–A3、1 路真模拟输出DAC0的完整排布并能基于源码级证据独立完成 Arduino 风格的应用开发。1 RTduinoRT-Thread 的 Arduino 生态兼容层STM32L475 潘多拉 BSP 已完整适配 RTduino 软件包——即 RT-Thread 的 Arduino 生态兼容层。开启后用户既可以保持 RT-Thread 原生的线程、设备框架编程方式又可以按照 Arduino 的编程习惯setup()/loop()、pinMode/digitalWrite等操作该 BSP并能复用 Arduino 社区丰富的外设库是对 RT-Thread 生态的极大增强。从构建脚本可以确认该兼容层的挂载方式arduino_pinout/SConscript 中通过depend [PKG_USING_RTDUINO]将pins_arduino.c等引脚映射源文件条件性地纳入编译也就是说只有在包配置中启用了 RTduino 后引脚排布代码才会参与构建。1.1 如何开启针对本 BSP 的 Arduino 生态兼容层在 Env 工具下敲入menuconfig命令或在 RT-Thread Studio IDE 下选择 RT-Thread Settings按如下路径勾选Hardware Drivers Config --- Onboard Peripheral Drivers --- [*] Compatible with Arduino Ecosystem (RTduino)该选项对应 board/Kconfig 中的BSP_USING_ARDUINO配置项。它不仅仅是一个开关还会自动把 RTduino 运行所需的全部底层驱动一并选中串口BSP_USING_STLINK_TO_USARTuart1同时作为调试串口GPIOBSP_USING_GPIOPWMBSP_USING_PWM1/PWM2/PWM4及其用到的通道PWM1-CH1、PWM2-CH3/CH4、PWM4-CH1/CH3/CH4以及 Tone 功能所需的BSP_USING_TIM7ADCBSP_USING_ADC1覆盖 A0–A3 共 4 路模拟输入DACBSP_USING_DAC1覆盖 DAC0 真模拟输出SPIBSP_USING_SPI2WIRELESS 用户插槽并默认开启BSP_SPI2_TX_USING_DMA/BSP_SPI2_RX_USING_DMA软件 I2CBSP_USING_SOFT_I2C与RT_USING_SOFT_I2C1PC7-SDA / PC6-SCL 用户 I2CRTduino 自身的 Wire/SPI 支持RTDUINO_USING_WIRE、RTDUINO_USING_SPI并隐含RTDUINO_USING_SERVO。从源码结构可以看出这些依赖关系保证了勾选一个选项、整套硬件就绪的零配置体验。1.2 Arduino 程序的入口开启 RTduino 后用户程序入口从原生 applications/main.c默认的rt_pin_mode点灯示例切换为 Arduino 风格的 applications/arduino_main.cpp其结构完全遵循 Arduino 标准#include Arduino.h void setup(void) { /* put your setup code here, to run once: */ pinMode(LED_BUILTIN, OUTPUT); } void loop(void) { /* put your main code here, to run repeatedly: */ digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); delay(100); }默认例程让板载 LEDLED_BUILTIN即 D22 绿色 LED以 100ms 周期闪烁可作为验证兼容层是否正常工作的最快途径。2 Arduino 引脚排布统览该 BSP 遵照 Arduino UNO 板的引脚排列方式并扩展增加了潘多拉自身的板载资源功能引脚。完整的映射关系定义在 pins_arduino.c 与 pins_arduino.h 中。2.1 Arduino 数字/模拟引脚与 STM32 引脚映射表Arduino 引脚编号STM32 引脚编号5V 容忍备注0 (D0)PA10是Serial-Rx被 RT-Thread 的 UART 设备框架 uart1 接管1 (D1)PA9是Serial-Tx被 RT-Thread 的 UART 设备框架 uart1 接管2 (D2)PB9是普通 IO3 (D3)PD15是PWM4-CH4默认被 RT-Thread 的 PWM 设备框架 pwm4 接管4 (D4)PA8是普通 IO5 (D5)PD14是普通 IO6 (D6)PB11是PWM2-CH4默认被 RT-Thread 的 PWM 设备框架 pwm2 接管7 (D7)PB14是普通 IO8 (D8)PB12是普通 IO9 (D9)PD12是PWM4-CH1默认被 RT-Thread 的 PWM 设备框架 pwm4 接管10 (D10)PB10是PWM2-CH3默认被 RT-Thread 的 PWM 设备框架 pwm2 接管11 (D11)PB8是PWM4-CH3默认被 RT-Thread 的 PWM 设备框架 pwm4 接管12 (D12)PB15是普通 IO13 (D13)PB13是普通 IO14 (D14)PA1是振动电机-A15 (D15)PA0是振动电机-B16 (D16)PB2是蜂鸣器17 (D17)PD10是KEY018 (D18)PD9是KEY119 (D19)PD8是KEY220 (D20)PC13是KEY-WKUP21 (D21)PE7是用户红色 LED22 (D22, LED_BUILTIN)PE8是用户绿色 LED23 (D23)PE9是用户蓝色 LEDPWM1-CH1默认被 RT-Thread 的 PWM 设备框架 pwm1 接管24 (D24)PB03.6V 容忍红外发送25 (D25)PB1是红外接收26 (D26)PD4是无线模块 CE27 (D27)PD3是无线模块 中断28 (D28, SS)PD5是无线模块 片选 CS29 (D29)PB13SPI2-SCK默认被 RT-Thread 的 SPI 设备框架 spi2 总线接管30 (D30)PB14SPI2-MISO默认被 RT-Thread 的 SPI 设备框架 spi2 总线接管31 (D31)PB15SPI2-MOSI默认被 RT-Thread 的 SPI 设备框架 spi2 总线接管32 (D32)PC7是I2C1-SDA默认被 RT-Thread 的 I2C 设备框架 i2c1 总线接管33 (D33)PC6是I2C1-SCL默认被 RT-Thread 的 I2C 设备框架 i2c1 总线接管34 (D34)PA2Serial2-Tx默认被 RT-Thread 的 UART 设备框架 uart2 接管35 (D35)PA3Serial2-Rx默认被 RT-Thread 的 UART 设备框架 uart2 接管36 (D36)PD7是LCD 片选 CS37 (D37)PB6是LCD 复位 RESET38 (D38)PB4是LCD D/C 数据命令选择即 RW 读写选择39 (D39)PB7是LCD 背光电源PWM4-CH2默认被 RT-Thread 的 PWM 设备框架 pwm4 接管A0PC2是但不建议ADC1-CH3默认被 RT-Thread 的 ADC 设备框架 adc1 接管A1PC4是但不建议ADC1-CH13默认被 RT-Thread 的 ADC 设备框架 adc1 接管A2--芯片内部参考电压 ADC1-CH0默认被 RT-Thread 的 ADC 设备框架 adc1 接管A3--芯片内部温度 ADC1-CH17默认被 RT-Thread 的 ADC 设备框架 adc1 接管DAC0PA43.6V 容忍真模拟输出 DAC1-CH1默认被 RT-Thread 的 DAC 设备框架 dac1 接管注意驱动舵机和analogWrite函数要选择不同定时器发生的 PWM 信号引脚。由于 STM32 的定时器 4 个通道需要保持相同的频率如果采用相同的定时器发生的 PWM 分别驱动舵机和analogWrite可能会导致舵机失效。2.2 引脚映射的源码实现上述表格并非注释文档而是直接由 pins_arduino.c 中的pin_map_table[]数组定义并驱动 RTduino 运行时工作的。该数组每行按{Arduino Pin, RT-Thread Pin [, Device Name, Channel]}格式组织其中方括号内为可选字段const pin_map_t pin_map_table[] { { D0, GET_PIN(A, 10), uart1 }, /* Serial-Rx */ { D1, GET_PIN(A, 9), uart1 }, /* Serial-Tx */ { D2, GET_PIN(B, 9) }, { D3, GET_PIN(D, 15), pwm4, 4 }, /* PWM */ ... { A0, GET_PIN(C, 2), adc1, 3 }, /* ADC */ { A1, GET_PIN(C, 4), adc1, 13 }, /* ADC */ { A2, RT_NULL, adc1, RT_ADC_INTERN_CH_VREF }, /* On-Chip: internal reference voltage */ { A3, RT_NULL, adc1, RT_ADC_INTERN_CH_TEMPER }, /* On-Chip: internal temperature sensor */ { DAC0, GET_PIN(A, 4), dac1, 1 }, /* DAC */ };关键约定数字引脚Digital pins必须不给出设备名和通道否则会被误判为复用功能模拟引脚Analog pins必须给出设备名和通道ADC、PWM 或 DAC 三者之一Arduino 引脚编号必须按顺序排列从源码注释可以确认这是一条硬性约束便于 RTduino 通过数组下标直接索引A2、A3 对应的GET_PIN字段为RT_NULL因为它们是芯片内部通道参考电压、温度传感器没有物理引脚直接由adc1设备的内部通道号RT_ADC_INTERN_CH_VREF、RT_ADC_INTERN_CH_TEMPER驱动。而在 pins_arduino.h 中所有引脚编号被定义为从 0 开始的连续宏且RTDUINO_PIN_MAX_LIMIT被设定为DAC0作为引脚编号的上限校验依据#define D0 (0) ... #define D39 (39) #define A0 (40) #define A1 (41) #define A2 (42) #define A3 (43) #define DAC0 (44) #define RTDUINO_PIN_MAX_LIMIT DAC0 /* pin number max limit check */ #define F_CPU 80000000L /* CPU:80MHz */ #define LED_BUILTIN D22 /* Default Built-in LED */F_CPU被定义为 80MHz与 STM32L475 在该 BSP 下的系统主频一致供依赖延时计算的 Arduino 库使用LED_BUILTIN指向 D22绿色 LED因此 Arduino 例程中的LED_BUILTIN无需任何配置即可直接点亮板载绿灯。3 板载排针的 Arduino 引脚排布潘多拉开发板两侧排针的物理排布如下左右两列同时列出便于对照焊接/接线STM32 引脚编号Arduino 引脚编号备注STM32 引脚编号Arduino 引脚编号备注PB811 (D11)PWMPB92 (D2)普通 IOPC7A4I2C1-SDAPA84 (D4)普通 IOPD153 (D3)PWMPC6A5I2C1-SCLPD13----PD145 (D5)普通 IOPC2A0ADCPD129 (D9)PWMPB147 (D7)普通 IOPB1512 (D12)普通 IOPB128 (D8)普通 IOPB1313 (D13)普通 IOPB1010 (D10)PWMPB116 (D6)PWMPC4A1ADCPA4DAC0DAC需要说明的是上表中 A4/A5 是 Arduino UNO 排针布局习惯上 I2C 所在的位置在本 BSP 中 A4 对应 PC7I2C SDA、A5 对应 PC6I2C SCL与 2.1 节中 D32/D33 的映射保持一致PD13 未分配 Arduino 功能--。4 板载外设的 Arduino 引脚排布潘多拉板载外设全部映射为 Arduino 引脚可直接用 Arduino API 操作外设名称Arduino 引脚编号STM32 引脚编号振动电机-A14 (D14)PA1振动电机-B15 (D15)PA0蜂鸣器16 (D16)PB2KEY017 (D17)PD10KEY118 (D18)PD9KEY219 (D19)PD8KEY-WKUP20 (D20)PC13红 LED21 (D21)PE7绿 LEDArduino 默认 LED22 (D22, LED_BUILTIN)PE8蓝 LED具有 PWM 功能23 (D23)PE9红外发射24 (D24)PB0红外接收25 (D25)PB1在 pins_arduino.c 中这些外设同样以普通数字引脚注册如{ D14, GET_PIN(A, 1) } /* BSP: MOTOR-A */、{ D16, GET_PIN(B, 2) } /* BSP: BEEP */、{ D21, GET_PIN(E, 7) } /* BSP: RED-LED */因此digitalWrite(D14, HIGH)即可直接启动振动电机digitalWrite(D16, HIGH)即可驱动蜂鸣器digitalRead(D17)即可读取 KEY0 状态无需关心底层 GPIO 号。5 通信接口5.1 I2C 总线潘多拉 BSP 为 Arduino 提供三条 I2C 总线均可通过#include Wire.hArduino 官方 I2C 头文件直接使用因为引脚已被 RT-Thread I2C 设备框架接管无需直接操控引脚电平用户总线swi2c1PC7 为 SDA、PC6 为 SCL用户可以通过杜邦线连接其他 I2C 传感器/芯片板载外设总线swi2c3连接板载 ICM20608陀螺仪和加速度传感器和 AP3216C距离和光亮度传感器芯片板载外设总线swi2c4连接板载 AHT10温湿度传感器芯片。默认总线由 pins_arduino.h 中的RTDUINO_DEFAULT_IIC_BUS_NAME宏决定并且会根据你在 menuconfig 中使能的传感器库自动切换#if defined(BSP_USING_ARDUINO_AHT10) #define RTDUINO_DEFAULT_IIC_BUS_NAME swi2c4 /* swi2c4 - AHT10 (On Board) */ #elif defined(BSP_USING_ARDUINO_AP3216) || defined(BSP_USING_ARDUINO_ICM20608) #define RTDUINO_DEFAULT_IIC_BUS_NAME swi2c3 /* swi2c3 - ICM20608, AP3216C (On Board) */ #else #define RTDUINO_DEFAULT_IIC_BUS_NAME swi2c1 /* swi2c1 - PC7-SDA PC6-SCL (User I2C) */ #endif也就是说使能 AHT10 库时默认总线为 swi2c4使能 AP3216 或 ICM20608 库时默认总线为 swi2c3都不使能时默认总线为用户可自由接线的 swi2c1。这三条均为 RT-Thread 软件 I2Cswi2c总线其默认引脚可在 board/Kconfig 中查到swi2c1 的 SCL 为引脚 38对应 PC6、SDA 为引脚 39对应 PC7swi2c3 的 SCL 为 32、SDA 为 33swi2c4 的 SCL 为 54、SDA 为 33。5.2 SPI 总线潘多拉板的 Arduino SPI 总线是spi2 总线位置为板上左上角的WIRELESS插槽。SCKPB13、MISOPB14、MOSIPB15引脚均被 RT-Thread SPI 设备框架接管无需直接操控直接引用#include SPI.hArduino 官方 SPI 头文件即可使用。按照 Arduino 的编程标准用户需要自行控制片选信号默认为SS即D28PD5无线模块片选 CS。当通过 board/Kconfig 使能BSP_USING_ARDUINO_ST7789板载 LCD 的 Arduino 库时默认 SPI 总线会切换为 spi3 并重新定义片选这一点在 pins_arduino.h 中通过条件编译实现#if defined(BSP_USING_ARDUINO_ST7789) #define SS D36 /* LCD-SPI-CS PD7 */ #define RTDUINO_DEFAULT_SPI_BUS_NAME spi3 /* LCD SPI Bus */ #else /* spi2 - PB13-SCK PB14-MISO PB15-MOSI */ #define SS D28 /* Chip select pin of default spi */ #define RTDUINO_DEFAULT_SPI_BUS_NAME spi2 #endifLCD 模式下的引脚约定见头文件注释LCD-SPI-SDA 为 PB5、LCD-SPI-SCK 为 PB3、LCD-SPI-CS 为 PD7、LCD-POWER 为 PB7、LCD-RESET 为 PB6、LCD-WR/DC 为 PB4并会启用BSP_USING_PWM4_CH2用于背光控制。5.3 串口默认支持通过Serial.方法调用uart1串口设备对应 D0/D1PA10/PA9即板载 ST-Link 转串口通过Serial2.方法调用uart2串口设备对应 D34/D35PA2/PA3。设备名与引脚的对应关系可以在 pins_arduino.h 中找到/* Serial2 - PA2-TX PA3-RX */ #define RTDUINO_SERIAL2_DEVICE_NAME uart2配合 board/Kconfig 中 uart1/uart2 的BSP_UARTx_RX_BUFSIZE默认 256、BSP_UARTx_TX_BUFSIZE默认 0等可调参数串口缓冲可以在 menuconfig 中按需调整。5.4 USB 虚拟串口本 BSP 还支持 USB 虚拟串口但默认关闭需要手动使能RT-Thread online packages --- Arduino libraries --- [*] RTduino: Arduino Ecological Compatibility Layer [*] Enable USB Serial使能后即可像普通串口一样通过 Arduino 的 Serial 类与上位机通信。6 特殊功能说明6.1 芯片内部 ADC 通道本 BSP 适配了 STM32 的两个芯片内部 ADC 通道可以通过analogRead函数直接读取无需外接任何引脚特殊功能Arduino 引脚编号STM32 引脚编号芯片内部参考电压 ADCA2--芯片内部温度 ADCA3--在 pins_arduino.c 中A2/A3 通过RT_ADC_INTERN_CH_VREF与RT_ADC_INTERN_CH_TEMPER两个内部通道号映射到adc1设备。典型用法uint16_t vref analogRead(A2); /* 读取芯片内部参考电压 */ uint16_t temp analogRead(A3); /* 读取芯片内部温度 */6.2 真模拟输出功能True Analog OutputArduino 的analogWrite函数虽名为模拟写但早期 AVR 平台实际输出的是 PWM 数字信号而非真正的模拟信号——这是 Arduino 历史上沿用下来的习惯。随着支持芯片的丰富部分高级芯片已内建 DAC如 Arduino 官方板 MKR、Zero 等Arduino 的analogWrite函数因此也支持了真模拟输出功能。特殊功能Arduino 引脚编号STM32 引脚编号真模拟输出 (True Analog Output)DAC0PA4在潘多拉板上使用 PA4 作为真模拟输出功能引脚dac1设备通道 1使用方法为analogWrite(DAC0, 128);写入值范围为 0–255与 PWM 风格analogWrite保持一致的取值范围由 RTduino 换算为 DAC 的实际分辨率。PA4 标注为 3.6V 容忍注意不要施加超过该阈值的电压。7 实战要点小结开启方式Hardware Drivers Config → Onboard Peripheral Drivers → Compatible with Arduino Ecosystem (RTduino)依赖驱动自动使能默认 LEDLED_BUILTIN即 D22PE8 绿色 LED直接可点PWM 引脚D3/D9/D11/D39 走 pwm4、D6/D10 走 pwm2、D23 走 pwm1驱动舵机与analogWrite务必选择不同定时器的 PWM 引脚避免因同一定时器各通道同频导致舵机失效ADC 引脚A0PC2、A1PC4为外部模拟输入A2/A3 为芯片内部参考电压与温度通道DAC 引脚DAC0PA4支持真模拟输出analogWrite(DAC0, 128)即可产生真实模拟电压通信总线Wire 默认挂 swi2c1/swi2c3/swi2c4随使能传感器库自动切换SPI 默认挂 spi2SSD28Serial 对应 uart1、Serial2 对应 uart2。所有引脚映射、默认总线和设备名均以 pins_arduino.c 与 pins_arduino.h 为最终依据若需自定义映射或新增板载外设可在这两个文件中按pin_map_table[]的格式扩展并通过 SConscript 与 board/Kconfig 纳入构建与配置体系。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread 与 Arduino 生态兼容STM32F411 WeAct BlackPill 开发板 RTduino 适配与引脚排布全指南RT Thread 与 Arduino 生态兼容STM32F411 WeAct BlackPill 开发板 RTduino 适配与引脚排布全指南 导读 本文面操作系统嵌入式物联网嵌入式OSRTOSSTM32U575-NUCLEO 开发板 RTduino Arduino 生态兼容层开启配置与引脚排布完全解析RT-ThreadSTM32U575 NUCLEO 开发板 RTduino Arduino 生态兼容层开启配置与引脚排布完全解析RT Thread 本文围绕 RT Thre操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 的 PSoC6 Evaluation Kit 062S2 开发板 Arduino 生态兼容指南RTduino 引脚排布与配置实战RT Thread 的 PSoC6 Evaluation Kit 062S2 开发板 Arduino 生态兼容指南RTduino 引脚排布与配置实战 导读 本操作系统嵌入式物联网嵌入式OSRTOS上一篇为什么选择pit_ti_224.in1k性能对比与优势分析下一篇CAMEL 消息机制完全指南BaseMessage 的创建、转换与多模态实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑