The Feather STM32F405 is chock-full of microcontroller goodness. There's also a lot of pins and ports. We'll take you a tour of them now!

Power Pins

  • GND - this is the common ground for all power and logic
  • BAT - this is the positive voltage to/from the JST jack for the optional Lipoly battery
  • USB - this is the positive voltage to/from the USB C jack if connected
  • EN - this is the 3.3V regulator's enable pin. It's pulled up, so connect to ground to disable the 3.3V regulator
  • 3V - this is the output from the 3.3V regulator, it can supply 500mA peak

This is the general purpose I/O pin set for the microcontroller.
All logic is 3.3V, nearly all pins are 5V compliant
Many pins can do PWM output
All pins can be interrupt inputs

  • RX / GPIO 0  / PB11
    Receive (input) pin for Serial3. Hardware USART3
    PWM out on TIM2_CH4
    Alternate uses: I2C2 SDA
  • TX / GPIO 1 / PB10
    Transmit (output) pin for Serial3. Hardware USART3
    PWM out on TIM2_CH3
    Alternate uses: I2C2 SCL
  • SDA / GPIO 14 / PB7
    The I2C (Wire) data pin, this has a 10K pullup to 3.3V. Hardware I2C1
    PWM out on TIM4_CH2
    Alternate uses: USART1 RX
  • SCL / GPIO 15 PB6
    the I2C (Wire) clock pin, this has a 10K pullup to 3.3V. Hardware I2C1
    PWM out on TIM4_CH1
    Alternate uses: USART1 TX, CAN2 TX
  • GPIO 5 / PC7
    PWM out on TIM3_CH2
    Alternate uses: USART6 RX, I2S3 MCK
  • GPIO 6 / PC6
    PWM out on TIM3_CH1
    Alternate uses: USART6 TX, I2S2 MCK
  • GPIO 9 / PB8
    PWM out on TIM4_CH3
    Alternate uses: CAN1 RX, I2C1 SCL
  • GPIO 10 / PB9
    PWM out on TIM4_CH4
    Alternate uses: CAN1 TX, I2C1 SDA
  • GPIO 11 / PC3
    No PWM
    Alternate uses: I2S2 SD, SPI2 MOSI
  • GPIO 12 / PC2
    No PWM
    Alternate uses: I2S2ext SD, SPI2 MISO
  • GPIO 13 / PC1
    Connected to the red LED next to the USB jack
    No PWM or alternate uses
  • SCK / GPIO23 / PB13
    The SPI bus clock pin. Hardware SPI2
    PWM out on TIM1_CH1N (available in Arduino, not CircuitPython)
    Alternate uses: I2S2 Clock, CAN2 TX
  • MISO / GPIO24 / PB14
    The SPI bus clock pin. Hardware SPI2
    PWM out on TIM1_CH2N
    Alternate uses: I2S2ext SD
  • MOSI / GPIO25 / PB15
    The SPI bus clock pin. Hardware SPI2
    PWM out on TIM1_CH3N
    Alternate uses: I2S2 SD

Analog Pins:

  • A0 / GPIO 16 / PA4
    This pin is analog input A0 (ADC12 IN4)
    Analog output (DAC OUT1) due to having a DAC (digital-to-analog converter). You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output
    No PWM or alternate uses
  • A1 / GPIO 17 / PA5
    This pin is analog input  A1 (ADC12 IN5)
    Analog output (DAC OUT2) due to having a DAC (digital-to-analog converter). This is the second DAC, and is 'independent' of A0. You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output.
    Alternative uses: SPI1 SCK
  • A2 / GPIO18 / PA6
    This pin is analog input  A2 (ADC12 IN6)
    Alternative uses: SPI1 MISO
    PWM out on TIM3_CH1
  • A3 / GPIO19 / PA7
    This pin is analog input  A3 (ADC12 IN7)
    Alternative uses: SPI1 MOSI
    PWM out on TIM3_CH2
  • A4 / GPIO20 / PC4
    This pin is analog input  A4 (ADC12 IN14)
  • A5 / GPIO21 / PC5
    This pin is analog input  A5 (ADC12 IN15)

A6 is also available for reading the battery voltage, see the Power Management page for instructions how

I2S Pins:

  • #1/Tx - I2S2 bit_clock pin.
  • #6 - I2S2 master clock pin
  • #10 - I2S2 word_select pin.
  • #11 - I2S2 data pin.

Note at this time we have not tested I2S in Arduino or MicroPython. There is no support yet in CircuitPython.

CAN Pins:

  • #9 - CAN1 RX
  • #10 - CAN1 TX

CircuitPython has CAN support via the canio module. MicroPython also supports CAN. Arduino has an open issue, no support.

SD Card / SDIO Pins

On the bottom of the PCB is a micro SD card slot. Unlike other Feathers, this is connected to the SDIO port (PC8 thru PC12 plus PD2).

In Arduino, SDIO is well supported via the STM32SD library .CircuitPython and MicroPython support SDIO. In CircuitPython use the sdioio module.

The SD detect pin is on PB12 a.k.a D32.
Rev B of this PCB has an error where SD detect is not usable, we will fix in rev C!

BAT Pins

The bottom has a test point named BAT near the center of the board. You can use it to keep the STM32's real-time clock, backup registers, and backup SRAM running while the rest of the chip is powered down.

DO NOT connect the BAT test point to the BAT pin at the side of the Feather. The voltage from a fully charged LiPo could damage the STM32.

SWD Port

On the bottom there is also a 2x5 connector pad that can be used to connect an SWD debug port for advanced uses. We don't solder the connector in place because it would take up space and make it hard to insert into a breadboard. However, you can pick up a 2x5 connector and solder it yourself! Pinout matches any/all JLink/SWD programmers with 2x5 connectors.

SPI Flash, STEMMA and NeoPixel

As part of the 'Express' series of boards, the Feather STM32F405 Express is designed for use with CircuitPython. To make that easy, we have added two extra parts to this Feather: a mini NeoPixel (RGB LED) and a 2 MB SPI Flash chip.

The NeoPixel is connected to pin #8 in Arduino, so just use our NeoPixel library and set it up as a single-LED strand on pin 8.

CircuitPython, the NeoPixel is board.NEOPIXEL and the library for it is here and in the bundle. The NeoPixel is powered by the 3.3V power supply but that hasn't shown to make a big difference in brightness or color. The NeoPixel is not used by the built in STM32 bootloader! This is different than our M0/M4/nRF52840 boards

The SPI Flash is connected to SPI bus 1 pins that are not brought out on the GPIO pads. This way you don't have to worry about the SPI flash colliding with other devices on the main SPI connection.

We give the SPI Flash the 'faster' SPI port 1 because there is no QSPI support, and reading fast from the SPI is important if you want to stream audio clips or GIFs.

In CircuitPython the SPI flash is automatically used as the filesystem exposed over USB.

In Arduino you can access SPI flash with our library and adding this definition to the top of your sketch to instantiate the SPI flash.
SPIClass SPI_FLASH(PIN_SPI1_MOSI, PIN_SPI1_MISO, PIN_SPI1_SCK, PIN_SPI1_SS);
Adafruit_FlashTransport_SPI flashTransport(PIN_SPI1_SS, &SPI_FLASH);
Note that our SPI flash library cannot be used at the same time as the SDIO library because they have colliding File definitions.

The Qwiic / STEMMA QT port is a JST SH 1.0mm pitch connector that gives a plug-and-play connection to 3.3V, GND, SDA and SCL. Perfect for attaching a wide variety of sensors. Check out our wide range of cables and devices that can be chained together just like this mini GPS module:

In CircuitPython, you can use the STEMMA connector with board.SCL and board.SDA, or board.STEMMA_I2C().

This guide was first published on Nov 05, 2019. It was last updated on Nov 05, 2019.

This page (Pinouts) was last updated on Nov 04, 2019.

Text editor powered by tinymce.