[PICO]引脚定义

Raspberry Pi Pico 2 引脚定义及编程指南

Raspberry Pi Pico 2 是树莓派基金会推出的新一代微控制器开发板,搭载了性能更强劲的 RP2350 芯片。它保持了与第一代 Pico 完全兼容的 40 引脚布局,提供了 26 个多功能 GPIO(通用输入输出)引脚,并支持丰富的通信接口(I2C、SPI、UART)和模拟输入(ADC)。本文将基于官方引脚定义,详细介绍 Pico 2 的引脚功能,并分别使用 Arduino 风格(基于 Arduino-Pico 核心)和 C/C++ 风格(基于官方 Pico SDK)给出编程示例,帮助你快速上手。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
┌────────────────────────────────────────────────────┐
│ 左侧(引脚1~20) │ 右侧 │
├────────────────────────────────────────────────────┤
1: GP0 / SPI0 RX / I2C0 SDA / UART0 TX │ 40
2: GP1 / SPI0 CSn / I2C0 SCL / UART0 RX │ 39
3: GND │ 38
4: GP2 / SPI0 SCK / I2C1 SDA │ 37
5: GP3 / SPI0 TX / I2C1 SCL │ 36
6: GP4 / SPI0 RX / I2C0 SDA / UART1 TX │ 35
7: GP5 / SPI0 CSn / I2C0 SCL / UART1 RX │ 34
8: GND │ 33
9: GP6 / SPI0 SCK / I2C1 SDA │ 32
10: GP7 / SPI0 TX / I2C1 SCL │ 31
11: GP8 / SPI1 RX / I2C0 SDA / UART1 TX │ 30
12: GP9 / SPI1 CSn / I2C0 SCL / UART1 RX │ 29
13: GND │ 28
14: GP10 / SPI1 SCK / I2C1 SDA │ 27
15: GP11 / SPI1 TX / I2C1 SCL │ 26
16: GP12 / SPI1 RX / I2C0 SDA / UART0 TX │ 25
17: GP13 / SPI1 CSn / I2C0 SCL / UART0 RX │ 24
18: GND │ 23
19: GP14 / SPI1 SCK / I2C1 SDA │ 22
20: GP15 / SPI1 TX / I2C1 SCL │ 21
└────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────┐
│ 左侧 │ 右侧 (引脚40~21) │
├────────────────────────────────────────────────────┤
140: VBUS │
239: VSYS │
338: GND │
437: 3V3_EN │
536: 3V3(OUT) │
635: / ADC_VREF │
734: GP28 / ADC2 │
833: GND / AGND │
932: GP27 / ADC1 / I2C1 SCL │
1031: GP26 / ADC0 / I2C1 SDA │
1130: RUN │
1229: GP22 │
1328: GND │
1427: GP21 / / I2C0 SCL │
1526: GP20 / / I2C0 SDA │
1625: GP19 / SPI0 TX / I2C1 SCL │
1724: GP18 / SPI0 SCK / I2C1 SDA │
1823: GND │
1922: GP17 / SPI0 CSn / I2C0 SCL / UART0 RX│
2021: GP16 / SPI0 RX / I2C0 SDA / UART0 TX│
└────────────────────────────────────────────────────┘

注意:GPIO 编号与物理引脚编号并不相同,例如 GP0 位于物理引脚 1GP25 是板载 LED 的控制引脚(物理引脚无对应,仅内部连接)。

1. 引脚概述

Pico 2 的 40 个物理引脚 采用标准的 2.54mm 间距排针,布局如下:

  • 左侧:物理引脚 120(从上到下)
  • 右侧:物理引脚 4021(从上到下)

这样的布局使得板子可以轻松插入面包板或配合扩展板使用。每个物理引脚对应一个 GPIO 编号(如 GP0、GP1…),编程时需通过 GPIO 编号控制引脚。

下面的表格列出了所有物理引脚及其对应的 GPIO 编号和主要功能(复用功能仅列出常用部分)。

左侧引脚(1~20)

物理引脚 GPIO 编号 主要功能(复用)
1 GP0 SPI0 RX, I2C0 SDA, UART0 TX
2 GP1 SPI0 CSn, I2C0 SCL, UART0 RX
3 GND 电源地
4 GP2 SPI0 SCK, I2C1 SDA
5 GP3 SPI0 TX, I2C1 SCL
6 GP4 SPI0 RX, I2C0 SDA, UART1 TX
7 GP5 SPI0 CSn, I2C0 SCL, UART1 RX
8 GND 电源地
9 GP6 SPI0 SCK, I2C1 SDA
10 GP7 SPI0 TX, I2C1 SCL
11 GP8 SPI1 RX, I2C0 SDA, UART1 TX
12 GP9 SPI1 CSn, I2C0 SCL, UART1 RX
13 GND 电源地
14 GP10 SPI1 SCK, I2C1 SDA
15 GP11 SPI1 TX, I2C1 SCL
16 GP12 SPI1 RX, I2C0 SDA, UART0 TX
17 GP13 SPI1 CSn, I2C0 SCL, UART0 RX
18 GND 电源地
19 GP14 SPI1 SCK, I2C1 SDA
20 GP15 SPI1 TX, I2C1 SCL

右侧引脚(40~21)

物理引脚 GPIO 编号 主要功能(复用)
40 VBUS USB 5V 输入(当通过 USB 供电时)
39 VSYS 主系统电源输入(1.8V–5.5V)
38 GND 电源地
37 3V3_EN 3.3V 稳压器使能(低电平关闭)
36 3V3(OUT) 3.3V 稳压输出(最大约 300mA)
35 ADC_VREF ADC 参考电压输入(默认为 3.3V)
34 GP28 ADC2(模拟输入)
33 GND/AGND 模拟地(与数字地相连)
32 GP27 ADC1, I2C1 SCL
31 GP26 ADC0, I2C1 SDA
30 RUN 芯片复位(低电平复位)
29 GP22 通用 GPIO
28 GND 电源地
27 GP21 I2C0 SCL
26 GP20 I2C0 SDA
25 GP19 SPI0 TX, I2C1 SCL
24 GP18 SPI0 SCK, I2C1 SDA
23 GND 电源地
22 GP17 SPI0 CSn, I2C0 SCL, UART0 RX
21 GP16 SPI0 RX, I2C0 SDA, UART0 TX

注意

  • 所有 GPIO 均为 3.3V 逻辑电平,输入不可承受 5V 电压。
  • 每个 GPIO 最大输出/输入电流约为 12mA,驱动大负载需使用外部电路。
  • 板载 LED 连接在 GP25(未在上述列表中),高电平点亮。

2. 引脚功能详解

2.1 电源引脚

引脚功能 物理引脚 描述
VBUS 40 USB 接口输入的 5V 电源,当板子通过 USB 供电时可用。
VSYS 39 主系统电源输入,可接入 1.8V–5.5V,经板载稳压器输出 3.3V。
3V3(OUT) 36 3.3V 稳压输出,可为外部传感器或模块供电。
3V3_EN 37 3.3V 稳压器使能引脚,拉低可关闭板子供电。
GND 3, 8, 13, 18, 28, 33, 38 多个地引脚,用于连接电路参考地。
RUN 30 芯片复位引脚(低电平复位),内部有上拉电阻。

2.2 数字 GPIO 与 PWM

26 个 GPIO(GP0–GP22、GP26–GP28)均可作为数字输入或输出。几乎所有 GPIO 都支持 PWM(脉宽调制),共 24 个独立通道,可用于控制 LED 亮度、电机速度等。

数字输出示例:设置高电平(3.3V)或低电平(0V)。
数字输入示例:读取外部信号的高低状态。

2.3 模拟引脚(ADC)

Pico 2 集成了一个 12 位模数转换器,仅以下 3 个引脚支持模拟输入(ADC_VREF 为参考电压输入):

ADC 通道 GPIO 编号 物理引脚 说明
ADC0 GP26 31 模拟输入通道 0
ADC1 GP27 32 模拟输入通道 1
ADC2 GP28 34 模拟输入通道 2
ADC_VREF (无) 35 ADC 参考电压(默认为 3.3V)

使用 analogRead()(Arduino)或 adc_read()(SDK)可读取 0–4095 的数值,对应 0–3.3V。

提示:GP29 在本版 Pico 2 中未引出,ADC_VREF 直接连接至引脚 35。

2.4 通信接口(I2C、SPI、UART)

Pico 2 支持 I2C、SPI、UART 三种常用通信协议,每个接口可通过“引脚复用”功能映射到多组 GPIO 上。以下为常用的默认引脚配置(即最常见的分配):

I2C

接口 功能 默认引脚(GPIO) 可选引脚(其他 GPIO)
I2C0 SDA GP4 GP0, GP8, GP12, GP16, GP20, GP26
SCL GP5 GP1, GP9, GP13, GP17, GP21, GP27
I2C1 SDA GP2 GP6, GP10, GP14, GP18
SCL GP3 GP7, GP11, GP15, GP19

SPI

接口 功能 默认引脚(GPIO) 可选引脚(其他 GPIO)
SPI0 TX GP19 GP3, GP7, GP11, GP15
SCK GP18 GP2, GP6, GP10, GP14
RX GP16 GP0, GP4, GP8, GP12
CSn GP17 GP1, GP5, GP9, GP13
SPI1 TX GP11 GP15, GP19
SCK GP10 GP14, GP18
RX GP8 GP12, GP16
CSn GP9 GP13, GP17

UART

接口 功能 默认引脚(GPIO) 可选引脚(其他 GPIO)
UART0 TX GP0 GP12, GP16
RX GP1 GP13, GP17
UART1 TX GP4 GP8
RX GP5 GP9

注意:使用非默认引脚时,需要在初始化时显式指定引脚映射。

2.5 特殊功能引脚与板载外设

  • 板载 LED:连接在 GP25(物理引脚未引出),高电平点亮,低电平熄灭。
  • BOOTSEL 按键:不是引脚,按住后上电或复位可进入 USB 下载模式。
  • SWD 调试接口:位于板子底部边缘的三个焊盘(SWCLK、SWDIO、GND),用于调试烧录。
  • GP22:在某些固件(如 MicroPython)中作为启动安全模式触发脚(接地可跳过自动运行)。

3. 编程风格示例

以下分别展示 Arduino 风格(使用 Arduino IDE 和 Earle Philhower 的 Raspberry Pi Pico/RP2040 核心)和 C/C++ 风格(使用 Raspberry Pi Pico SDK)的代码,实现相同的功能。

3.1 Arduino 风格

Arduino 风格的编程最为简单,函数名与标准 Arduino 一致,适合快速原型开发。

示例 1:闪烁板载 LED(GP25)

1
2
3
4
5
6
7
8
9
10
void setup() {
pinMode(25, OUTPUT); // 设置 GP25 为输出
}

void loop() {
digitalWrite(25, HIGH); // 点亮 LED
delay(1000); // 等待 1 秒
digitalWrite(25, LOW); // 熄灭 LED
delay(1000);
}

示例 2:读取电位器(GP26)并输出到串口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void setup() {
Serial.begin(115200); // 初始化串口
pinMode(26, INPUT); // GP26 作为模拟输入(可省略)
}

void loop() {
int val = analogRead(26); // 读取 ADC0(GP26),返回 0–4095
float voltage = val * 3.3 / 4095.0;
Serial.print("ADC value: ");
Serial.print(val);
Serial.print(" Voltage: ");
Serial.println(voltage);
delay(100);
}

示例 3:PWM 控制 LED 呼吸灯(使用 GP0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int brightness = 0;
int fade = 5;

void setup() {
pinMode(0, OUTPUT);
}

void loop() {
analogWrite(0, brightness); // PWM 输出占空比(0–255)
brightness += fade;
if (brightness <= 0 || brightness >= 255) {
fade = -fade;
}
delay(30);
}

提示:Arduino-Pico 核心中,analogWrite() 会自动将 GPIO 配置为 PWM 输出,频率默认约 1kHz。

3.2 C/C++ 风格(Pico SDK)

使用官方 SDK 可以获得更底层的控制能力和更高的性能,适合需要精确时序或复杂外设配置的项目。

示例 1:闪烁板载 LED(GP25)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "pico/stdlib.h"

int main() {
stdio_init_all(); // 初始化标准输入输出(串口)
gpio_init(25); // 初始化 GP25
gpio_set_dir(25, GPIO_OUT); // 设置为输出

while (true) {
gpio_put(25, 1); // 高电平
sleep_ms(1000);
gpio_put(25, 0); // 低电平
sleep_ms(1000);
}
return 0;
}

示例 2:读取电位器(GP26)并输出到串口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "pico/stdlib.h"
#include "hardware/adc.h"

int main() {
stdio_init_all();
adc_init(); // 初始化 ADC 模块
adc_gpio_init(26); // 将 GP26 配置为 ADC 输入
adc_select_input(0); // 选择 ADC0(对应 GP26)

while (true) {
uint16_t raw = adc_read(); // 读取 12 位数值(0–4095)
float voltage = raw * 3.3f / 4095.0f;
printf("ADC: %u, Voltage: %.2f V\n", raw, voltage);
sleep_ms(100);
}
return 0;
}

示例 3:PWM 控制 LED 呼吸灯(使用 GP0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "pico/stdlib.h"
#include "hardware/pwm.h"

int main() {
stdio_init_all();
uint gpio = 0;
gpio_set_function(gpio, GPIO_FUNC_PWM); // 将 GPIO 设置为 PWM 功能
uint slice_num = pwm_gpio_to_slice_num(gpio); // 获取对应的 PWM 切片编号
pwm_set_wrap(slice_num, 255); // 设置计数周期(0–255)
pwm_set_enabled(slice_num, true); // 使能 PWM

int brightness = 0;
int fade = 5;

while (true) {
pwm_set_chan_level(slice_num, pwm_gpio_to_channel(gpio), brightness);
brightness += fade;
if (brightness <= 0 || brightness >= 255) {
fade = -fade;
}
sleep_ms(30);
}
return 0;
}

注意:SDK 中的 PWM 配置稍显繁琐,但提供了极高的灵活性(如可调频率、相位等)。


4. 实际应用案例

4.1 控制 LED 亮度(呼吸灯)

结合 PWM 功能,我们可以轻松实现呼吸灯效果。以下是两种编程风格的完整代码。

Arduino 风格(使用 GP0):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void setup() {
pinMode(0, OUTPUT);
}

void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(0, brightness);
delay(5);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(0, brightness);
delay(5);
}
}

C/C++ 风格(使用 SDK,GP0):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "pico/stdlib.h"
#include "hardware/pwm.h"

int main() {
uint gpio = 0;
gpio_set_function(gpio, GPIO_FUNC_PWM);
uint slice = pwm_gpio_to_slice_num(gpio);
pwm_set_wrap(slice, 255);
pwm_set_enabled(slice, true);

while (true) {
for (int b = 0; b <= 255; b++) {
pwm_set_chan_level(slice, pwm_gpio_to_channel(gpio), b);
sleep_ms(5);
}
for (int b = 255; b >= 0; b--) {
pwm_set_chan_level(slice, pwm_gpio_to_channel(gpio), b);
sleep_ms(5);
}
}
}

4.2 读取温度传感器(LM35 或模拟输出型)

假设一个模拟温度传感器(如 LM35)输出 10mV/℃,连接到 GP26(ADC0)。

Arduino 风格

1
2
3
4
5
6
7
8
9
10
11
12
13
void setup() {
Serial.begin(115200);
}

void loop() {
int raw = analogRead(26);
float voltage = raw * 3.3 / 4095.0;
float temperature = voltage * 100.0; // LM35: 10mV/℃
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" ℃");
delay(1000);
}

C/C++ 风格(SDK):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "pico/stdlib.h"
#include "hardware/adc.h"

int main() {
stdio_init_all();
adc_init();
adc_gpio_init(26);
adc_select_input(0);

while (true) {
uint16_t raw = adc_read();
float voltage = raw * 3.3f / 4095.0f;
float temperature = voltage * 100.0f;
printf("Temperature: %.2f ℃\n", temperature);
sleep_ms(1000);
}
}

警告:实际温度传感器的输出电压与温度的关系可能非线性,请务必参考具体传感器数据手册进行校正。


5. 总结与注意事项

通过本文,你应该已经全面了解了 Raspberry Pi Pico 2 的引脚布局与功能:

  • 引脚布局:左侧 1–20,右侧 40–21,所有 GPIO 均可复用为多种通信接口。
  • 电源与地:VBUS(5V)、VSYS(主输入)、3V3(输出)及多个 GND。
  • GPIO 功能:数字输入输出、PWM(几乎所有 GPIO)、ADC(仅 GP26、GP27、GP28)。
  • 通信接口:I2C、SPI、UART 支持引脚复用,可根据需要灵活选择。
  • 编程方式:既可像 Arduino 一样简单快速,也可使用 SDK 获得底层控制力。

使用注意事项

  1. 电压限制:所有 GPIO 为 3.3V 逻辑电平,输入电压不得超过 3.3V,否则可能损坏芯片。
  2. 电流限制:每个 GPIO 最大输出/输入电流约 12mA,总电流有限制,驱动大负载需使用外部电路(如晶体管、MOSFET)。
  3. ADC 参考电压:ADC_VREF 引脚(35)可接外部参考电压(范围 0–3.3V),若未连接则默认使用 3.3V。
  4. BOOTSEL 按键:如需重新烧录固件,先按住 BOOTSEL 按键,再连接 USB 或按下复位(RUN 拉低)。

6. 附加资源与练习

  • 练习 1:使用 I2C 接口连接一个 OLED 屏幕,显示当前温度和亮度。
  • 练习 2:用 SPI 接口读取一个 MCP3008 模数转换器,扩展更多模拟输入通道。
  • 练习 3:结合 PWM 和中断,实现一个简易的舵机控制程序。
  • 资源:树莓派官方文档 Raspberry Pi Pico 2 Datasheet 提供了完整的引脚定义和电气特性;RP2350 数据手册则详细介绍了每个外设的寄存器级操作。

希望这篇文章能帮助你快速掌握 Pico 2 的引脚使用,并顺利开始你的项目!


[PICO]引脚定义
https://ka5fxt.cn/2026/03/30/PICO-引脚定义/
发布于
2026年3月30日
许可协议