树莓派Pico引脚不够用?巧用GPIO复用与隐藏测试点(TP1-TP6)扩展你的项目
树莓派Pico引脚不够用巧用GPIO复用与隐藏测试点(TP1-TP6)扩展你的项目当你的树莓派Pico项目变得越来越复杂26个GPIO引脚可能突然显得捉襟见肘。别急着换开发板——Pico内部其实隐藏着更多可能性。本文将带你探索如何通过GPIO复用和那些常被忽视的测试点(TP1-TP6)来突破引脚限制为你的项目解锁新维度。1. GPIO复用让每个引脚发挥多重作用RP2040芯片的每个GPIO引脚都不只是简单的输入输出接口。通过Alternate Function(复用功能)配置你可以让同一个引脚在不同时间扮演不同角色。1.1 理解GPIO复用机制RP2040的GPIO复用系统允许每个引脚被动态重映射到不同的内部外设。这意味着一个引脚可以上午做UART通信下午变成PWM输出同一组物理引脚可以按需切换为SPI或I2C接口数字引脚可以临时变身为模拟输入(仅限GPIO26-29)复用配置主要通过gpio_set_function()函数实现。以下是C SDK中的典型设置流程#include hardware/gpio.h // 将GPIO0设置为SPI0 RX功能 gpio_set_function(0, GPIO_FUNC_SPI);在MicroPython中更简单import machine spi machine.SPI(0, sckmachine.Pin(2), mosimachine.Pin(3), misomachine.Pin(4)) # 即使这些引脚之前被用作其他用途现在也会自动切换为SPI功能1.2 复用实战创建第二组SPI接口虽然Pico官方文档只提到两组SPI(SPI0和SPI1)但通过复用我们可以创造出更多引脚默认SPI0功能复用为SPI1功能GP2SPI0 SCKSPI1 SCKGP3SPI0 TXSPI1 TXGP4SPI0 RXSPI1 RXGP5SPI0 CSnSPI1 CSn注意同时使用多组SPI时需注意时钟冲突问题建议不同时激活2. 隐藏的宝藏测试点(TP1-TP6)深度解析Pico底部那六个神秘的测试点(TP1-TP6)远不止用于工厂测试。它们提供了直接访问关键信号的途径是硬件黑客的秘密武器。2.1 测试点功能速查表测试点主要功能安全使用建议TP1专用USB地线连接USB设备时必接TP2USB D-需与TP3配对使用TP3USB D需与TP2配对使用TP4SMPS控制不建议外部使用TP5LED控制输出电压受限TP6BOOTSEL无需按钮即可烧录2.2 实战应用通过测试点扩展USB功能想连接额外的USB设备但不想占用宝贵的GPIOTP2和TP3就是答案准备四线电缆(包含D, D-, GND和5V)将TP2连接至设备的D-将TP3连接至设备的DTP1连接至设备地线从VBUS(引脚40)获取5V电源C SDK示例代码配置USB端口#include pico/stdlib.h #include hardware/gpio.h #include tusb.h void usb_task() { tud_task(); // 处理USB事件 if(tud_cdc_connected()) { uint8_t buf[64]; uint32_t count tud_cdc_read(buf, sizeof(buf)); // 处理接收到的数据 } }3. 高级技巧不按按钮的固件烧录厌倦了每次更新固件都要按住BOOTSEL按钮TP6可以解放你的手指在电路中添加一个NPN三极管或MOSFET将集电极/漏极连接至TP6发射极/源极接地通过任一GPIO控制基极/栅极这样就能通过代码触发烧录模式了import machine import time boot_pin machine.Pin(14, machine.Pin.OUT) # 假设GPIO14控制烧录电路 def enter_bootloader(): boot_pin.value(1) # 拉高触发三极管 time.sleep_ms(100) machine.reset() # 重启进入烧录模式4. 电源管理榨取每一毫瓦的性能当引脚紧张时合理管理电源可以释放出被占用的电源相关引脚GPIO23 (SMPS控制): 通常保持低电平(PFM模式)。设为高电平可强制PWM模式降低纹波但增加功耗GPIO24 (VBUS检测): 可用于检测USB连接状态无需额外电路GPIO29 (VSYS监测): 通过ADC读取系统电压实现电池电量监测电源模式优化示例// 切换电源模式 void set_power_mode(bool high_perf) { gpio_init(23); gpio_set_dir(23, GPIO_OUT); gpio_put(23, high_perf); // 高性能模式1省电模式0 }5. 极限挑战当所有GPIO都用完时即使复用和测试点都用上有时还是需要更多接口。这时可以考虑矩阵扫描技术: 用N个引脚控制N×M个按钮/LED移位寄存器: 如74HC5953个GPIO扩展出8个输出I2C/SPI扩展芯片: MCP23017等GPIO扩展器PIO程序: 用RP2040独有的可编程I/O实现定制接口PIO示例用单个引脚模拟WS2812B控制信号import rp2 from machine import Pin rp2.asm_pio(sideset_initrp2.PIO.OUT_LOW, out_shiftdirrp2.PIO.SHIFT_LEFT, autopullTrue) def ws2812(): T1 2 T2 5 T3 3 wrap_target() label(bitloop) out(x, 1) .side(0) [T3 - 1] jmp(not_x, do_zero) .side(1) [T1 - 1] jmp(bitloop) .side(1) [T2 - 1] label(do_zero) nop() .side(0) [T2 - 1] wrap() sm rp2.StateMachine(0, ws2812, freq8_000_000, sideset_basePin(15)) sm.active(1)通过这些技巧我的一个气象站项目成功在仅使用Pico的情况下同时驱动了传感器阵列、OLED显示屏、SD卡存储和无线模块。关键是把UART1复用到了原本用于LED的GPIO25上并通过TP6实现了无线固件更新。