Stampy Usage Guide

The Stampy is a controller board meant to assist with the construction of a handwired keyboard. Instead of using some other daughterboard like the Pro Micro, Elite-C, etc., Stampy gets soldered directly to 3 switches, meaning that no extra space below the controller is needed.


  • RP2040 Microcontroller

  • Compatible with both Cherry MX style switches.

  • 26 I/O pins available for your rows and columns, or other IO functions such as LEDs and RGB strips

  • 3 pins are preset for columns, and 1 pin is preset for a row

  • Can cover well over 100 switches

  • USB Type-C connector

  • QMK-compatible


  • Rev. 1 Prototype #1

    • Black PCB

    • 16Mbit (2MB) of flash memory

    • No VBUS detection circuit

    • Has access to GPIO9 (production version loses this pin due to it being used for VBUS detection)

    • Lack breakout pin for RST (Reset)

  • Rev. 1 Prototype #2

    • Purple PCB marked with X3 on top-side of PCB without Elephant logo

    • 8Mbit (1MB) of flash memory

    • Has VBUS detection pin on GPIO9

    • 3.3V breakout pad is not connected to anything

  • Rev. 1 Production

    • Purple PCB marked with X3 on top-side of PCB with Elephant logo

    • 16Mbit (2MB) of flash memory

    • Has VBUS detection pin on GPIO9

Pinouts and Assignments

Stampy has the following GPIO pins available: 0-8, 10, 11, 14-28.

4 of the pins are connected to the 3 switch locations in the following way:

  • Row 0 - GPIO14 (All 3 switches are connected to Row 0)

  • Column 0 - GPIO11 (Left switch)

  • Column 1 - GPIO10 (Center switch)

  • Column 2 - GPIO15 (Right switch)

  • The reset button is connected to RST and 3.3V (not GND)

GPIO9 is used for VBUS detection, so if you are using QMK, make sure you add the following line to your keyboard's config.h:

#define USB_VBUS_PIN GP9

The rest of the pins (0-8, 16-28) can be used in whatever manner you'd like, such as additional rows/columns or devices like OLED screens and pointing devices.

Flash Mode

To enter flash mode:

  • Short the two pins RST and 3.3V or hold reset button for at least one second before release.

  • Alternatively, if QMK has been loaded, double tap the reset button.

  • The soft reset QK_BOOT in QMK works as usual.


In QMK, RP2040 requires extra configuration for audio:

  • In the HAL configuration halconf.h, enable the use of PWM: #define HAL_USE_PWM TRUE.

  • In the MCU configuration mcuconf.h, enable the use of corresponding PWM peripherial #define RP_PWM_USE_PWM<peripheral_number> TRUE.

  • In the firmware configuration config.h enable AUDIO_PIN, AUDIO_PWM_DRIVER, and AUDIO_PWM_CHANNEL accordingly.

Do consult the RP2040 datasheet to enable the correct peripheral and channel for the chosen pin.

For example, if the pin GPIO7 (which uses PWM3 B) is chosen to be used to connect a piezoeletric buzzer, then these are the configurations:

// config.h
#define AUDIO_PIN GP7
// halconf.h
#pragma once


#include_next <halconf.h>
#pragma once

#include_next <mcuconf.h>

#undef RP_PWM_USE_PWM3

The Adafruit's Macropad is an example of working audio for RP2040.


Due to the tight spacing of components, if you are using 5-pin switches, you will need to clip both of the plastic pins for the Center switch and the left plastic pin for the Right switch.

Last updated