ST NUCLEO-F401RE pinout
ST's official STM32F401 board with Arduino Uno style sockets and a built-in ST-LINK programmer and debugger. 3.3 V logic, most pins tolerate 5 V.
At a glance
- Chip
- STM32F401RE (STM32F401RET6)
- Processor
- Arm Cortex-M4 with FPU at 84 MHz, 96 KB SRAM, 512 KB flash
- Logic level
- 3.3 V. Not 5 V tolerant unless marked below.
- Flashing tool
- STM32CubeProgrammer, stlink or dfu-util
- Arduino board (FQBN)
- STMicroelectronics:stm32:Nucleo_64:pnum=NUCLEO_F401RE
- Live pin view in BoardPilot
- Yes (diagnostic agent available)
Pins to avoid or use with care
Strapping pins: BOOT0, PB2
Their level at reset changes how the board boots. Usually fine after boot.
USB serial: RX/D0 (PA3), TX/D1 (PA2)
Used for uploading and the serial monitor. Anything connected here can break uploads.
Debug port: PA13, PA14
SWD/JTAG. Using them can stop a debugger from reaching the chip.
Used on the board: RX/D0 (PA3), TX/D1 (PA2), PC13, PC14, PC15, PH0, PH1
Already connected to something on the board (see the notes in the table).
Good pins for LEDs, buttons and signals
D2, D4, PWM/D5, PWM/D6, D7, D8, PWM/D9, PWM/D3, PWM/CS/D10, PWM/MOSI/D11, MISO/D12
Default pins in Arduino
- I2C
- SDA = SDA/D14, SCL = SCL/D15. Only these pins work with the Wire library defaults. Wire uses PB9 (D14) for SDA and PB8 (D15) for SCL. Only specific STM32 pin pairs can do I2C (for example PB7/PB6 with Wire.setSDA/setSCL).
- SPI
- MOSI = PWM/MOSI/D11, MISO = MISO/D12, SCK = SCK/D13, CS = PWM/CS/D10.
- Analog inputs
- A0, A1, A2, A3, A4, A5 (0–3.3 V)
- 5 V tolerant pins
- RX/D0 (PA3), TX/D1 (PA2), D2 (PA10), PWM/D3 (PB3), D4 (PB5), PWM/D5 (PB4), PWM/D6 (PB10), D7 (PA8), D8 (PA9), PWM/D9 (PC7), PWM/CS/D10 (PB6), PWM/MOSI/D11 (PA7), MISO/D12 (PA6), SCK/D13 (PA5), SDA/D14 (PB9), SCL/D15 (PB8), A0 (PA0), A1 (PA1), A2 (PA4), A3 (PB0), A4 (PC1), A5 (PC0), PC10, PC11, PC12, PD2, PA13, PA14, PA15, PB7, PC13, PC14, PC15, PH0, PH1, PC2, PC3, PC9, PC8, PC6, PC5, PA12, PA11, PB12, PB2, PB1, PB15, PB14, PB13, PC4
How to flash it
Plug the USB cable into the mini-USB port on the ST-LINK end. No button press is needed.
All 99 pins
| Pin | GPIO | Chip pin | Functions | Notes |
|---|---|---|---|---|
| RX/D0 | 3 | PA3 | GPIO, ADC1_IN3, UART2_RX, TIM2_CH4, TIM5_CH4, TIM9_CH2, PWM | Not connected to this header by default: PA3/PA2 go to the ST-LINK USB serial port (solder bridges SB13/SB14 on, SB62/SB63 off). Serial uses them. |
| TX/D1 | 2 | PA2 | GPIO, ADC1_IN2, UART2_TX, TIM2_CH3, TIM5_CH3, TIM9_CH1, PWM | Not connected to this header by default: PA3/PA2 go to the ST-LINK USB serial port (solder bridges SB13/SB14 on, SB62/SB63 off). Serial uses them. |
| D2 | 10 | PA10 | GPIO, UART1_RX, TIM1_CH3, USB_ID, PWM | |
| PWM/D3 | 19 | PB3 | GPIO, SWO, TIM2_CH2, SPI1_SCK, SPI3_SCK, I2C2_SDA, PWM | Also the SWO debug trace line to the ST-LINK (SB15). Fine as a normal pin. |
| D4 | 21 | PB5 | GPIO, TIM3_CH2, SPI1_MOSI, SPI3_MOSI, PWM | |
| PWM/D5 | 20 | PB4 | GPIO, TIM3_CH1, SPI1_MISO, SPI3_MISO, I2C3_SDA, PWM | |
| PWM/D6 | 26 | PB10 | GPIO, I2C2_SCL, SPI2_SCK, TIM2_CH3, PWM | |
| D7 | 8 | PA8 | GPIO, TIM1_CH1, I2C3_SCL, UART1_CK, MCO1, PWM | |
| D8 | 9 | PA9 | GPIO, UART1_TX, TIM1_CH2, USB_VBUS, PWM | |
| PWM/D9 | 39 | PC7 | GPIO, UART6_RX, TIM3_CH2, PWM | |
| PWM/CS/D10 | 22 | PB6 | GPIO, SPI_CS (default), I2C1_SCL, UART1_TX, TIM4_CH1, PWM | |
| PWM/MOSI/D11 | 7 | PA7 | GPIO, ADC1_IN7, SPI_MOSI (default), SPI1_MOSI, TIM1_CH1N, TIM3_CH2, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| MISO/D12 | 6 | PA6 | GPIO, ADC1_IN6, SPI_MISO (default), SPI1_MISO, TIM3_CH1, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| SCK/D13 | 5 | PA5 | GPIO, ADC1_IN5, SPI_SCK (default), SPI1_SCK, TIM2_CH1, PWM | Green user LED LD2 is on this pin (HIGH = on, solder bridge SB21). |
| SDA/D14 | 25 | PB9 | GPIO, I2C_SDA (default), I2C1_SDA, TIM4_CH4, TIM11_CH1, SPI2_NSS, PWM | Default I2C data pin (Wire SDA). |
| SCL/D15 | 24 | PB8 | GPIO, I2C_SCL (default), I2C1_SCL, TIM4_CH3, TIM10_CH1, PWM | Default I2C clock pin (Wire SCL). |
| GND | — | |||
| AVDD | — | Analog supply / ADC reference (AREF on Arduino boards). Tied to 3.3 V by SB57. | ||
| IOREF | — | Tells shields the logic level: 3.3 V. | ||
| NRST | — | Connect to GND to reset the board (same as the black RESET button). | ||
| 3V3 | — | 3.3 V output for sensors. | ||
| 5V | — | 5 V output (from USB by default). | ||
| GND | — | |||
| GND | — | |||
| VIN | — | Input for 7 to 12 V (with jumper JP5 on E5V/VIN). It gives no power when the board runs from USB. | ||
| A0 | 0 | PA0 | GPIO, ADC1_IN0, TIM2_CH1, TIM5_CH1, UART2_CTS, WKUP, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| A1 | 1 | PA1 | GPIO, ADC1_IN1, TIM2_CH2, TIM5_CH2, UART2_RTS, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| A2 | 4 | PA4 | GPIO, ADC1_IN4, SPI1_NSS, SPI3_NSS | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| A3 | 16 | PB0 | GPIO, ADC1_IN8, TIM3_CH3, TIM1_CH2N, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| A4 | 33 | PC1 | GPIO, ADC1_IN11 | Analog input PC1. Solder bridges SB46/SB56 can switch it to PB9 (I2C SDA); default is PC1. 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| A5 | 32 | PC0 | GPIO, ADC1_IN10 | Analog input PC0. Solder bridges SB52/SB51 can switch it to PB8 (I2C SCL); default is PC0. 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. |
| PC10 | 42 | GPIO, SPI3_SCK, SDIO_D2 | ||
| PC11 | 43 | GPIO, SPI3_MISO, SDIO_D3 | ||
| PC12 | 44 | GPIO, SPI3_MOSI, SDIO_CK | ||
| PD2 | 50 | GPIO, TIM3_ETR, SDIO_CMD | ||
| VDD | — | STM32 supply, 3.3 V. | ||
| E5V | — | Input for an external 5 V supply (4.75 to 5.25 V, jumper JP5 on E5V). Gives no power from USB. | ||
| BOOT0 | — | HIGH at reset starts the ST bootloader instead of your program. Leave it LOW (default). | ||
| GND | — | |||
| IOREF | — | Same as IOREF on the Arduino header. | ||
| PA13 | 13 | GPIO, SWDIO | SWD debug line to the on-board ST-LINK (SWDIO). Do not use it as I/O or programming stops working. | |
| RESET | — | Same as RESET on the Arduino header. | ||
| PA14 | 14 | GPIO, SWCLK | SWD debug line to the on-board ST-LINK (SWCLK). Do not use it as I/O or programming stops working. | |
| +3.3V | — | Same as 3V3 on the Arduino header. | ||
| PA15 | 15 | GPIO, JTDI, TIM2_CH1, SPI1_NSS, SPI3_NSS, PWM | ||
| +5V | — | Same as 5V on the Arduino header. | ||
| GND | — | |||
| GND | — | |||
| PB7 | 23 | GPIO, I2C1_SDA, UART1_RX, TIM4_CH2, PWM | ||
| GND | — | |||
| PC13 | 45 | GPIO, RTC_OUT | Blue USER button B1 is wired to this pin (SB17). Weak pin: do not drive LEDs from it. | |
| VIN | — | Same as VIN on the Arduino header. | ||
| PC14 | 46 | GPIO, OSC32_IN | 32.768 kHz crystal X2 pin. Not connected to this header on MB1136 C-02 and later (SB48/SB49 off). | |
| PC15 | 47 | GPIO, OSC32_OUT | 32.768 kHz crystal X2 pin. Not connected to this header on MB1136 C-02 and later (SB48/SB49 off). | |
| PA0 | 0 | GPIO, ADC1_IN0, TIM2_CH1, TIM5_CH1, UART2_CTS, WKUP, PWM | Same signal as Arduino pin A0. | |
| PH0 | 112 | GPIO, OSC_IN | High-speed clock input (8 MHz from the ST-LINK on MB1136 C-02 and later). Not usable as a normal pin. | |
| PA1 | 1 | GPIO, ADC1_IN1, TIM2_CH2, TIM5_CH2, UART2_RTS, PWM | Same signal as Arduino pin A1. | |
| PH1 | 113 | GPIO, OSC_OUT | High-speed clock input (8 MHz from the ST-LINK on MB1136 C-02 and later). Not usable as a normal pin. | |
| PA4 | 4 | GPIO, ADC1_IN4, SPI1_NSS, SPI3_NSS | Same signal as Arduino pin A2. | |
| VBAT | — | RTC backup supply. Tied to 3.3 V on this board (SB45). | ||
| PB0 | 16 | GPIO, ADC1_IN8, TIM3_CH3, TIM1_CH2N, PWM | Same signal as Arduino pin A3. | |
| PC2 | 34 | GPIO, ADC1_IN12, SPI2_MISO | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. | |
| PC1 | 33 | GPIO, ADC1_IN11 | Same signal as Arduino pin A4. | |
| PC3 | 35 | GPIO, ADC1_IN13, SPI2_MOSI | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. | |
| PC0 | 32 | GPIO, ADC1_IN10 | Same signal as Arduino pin A5. | |
| PC9 | 41 | GPIO, TIM3_CH4, I2C3_SDA, MCO2, SDIO_D1, PWM | ||
| PC8 | 40 | GPIO, TIM3_CH3, SDIO_D0, PWM | ||
| PB8 | 24 | GPIO, I2C_SCL (default), I2C1_SCL, TIM4_CH3, TIM10_CH1, PWM | Same signal as Arduino pin D15. | |
| PC6 | 38 | GPIO, UART6_TX, TIM3_CH1, PWM | ||
| PB9 | 25 | GPIO, I2C_SDA (default), I2C1_SDA, TIM4_CH4, TIM11_CH1, SPI2_NSS, PWM | Same signal as Arduino pin D14. | |
| PC5 | 37 | GPIO, ADC1_IN15 | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. | |
| AVDD | — | Same as AVDD on the Arduino header. | ||
| U5V | — | 5 V from the ST-LINK USB connector. | ||
| GND | — | |||
| PA5 | 5 | GPIO, ADC1_IN5, SPI_SCK (default), SPI1_SCK, TIM2_CH1, PWM | Same signal as Arduino pin D13. Green user LED LD2 is on this pin (HIGH = on, solder bridge SB21). | |
| PA12 | 12 | GPIO, USB_DP, UART1_RTS, UART6_RX, TIM1_ETR | USB data line of the STM32, but no USB connector is wired to it on this board. | |
| PA6 | 6 | GPIO, ADC1_IN6, SPI_MISO (default), SPI1_MISO, TIM3_CH1, PWM | Same signal as Arduino pin D12. | |
| PA11 | 11 | GPIO, USB_DM, UART1_CTS, UART6_TX, TIM1_CH4, PWM | USB data line of the STM32, but no USB connector is wired to it on this board. | |
| PA7 | 7 | GPIO, ADC1_IN7, SPI_MOSI (default), SPI1_MOSI, TIM1_CH1N, TIM3_CH2, PWM | Same signal as Arduino pin D11. | |
| PB12 | 28 | GPIO, SPI2_NSS, TIM1_BKIN | ||
| PB6 | 22 | GPIO, SPI_CS (default), I2C1_SCL, UART1_TX, TIM4_CH1, PWM | Same signal as Arduino pin D10. | |
| PC7 | 39 | GPIO, UART6_RX, TIM3_CH2, PWM | Same signal as Arduino pin D9. | |
| GND | — | |||
| PA9 | 9 | GPIO, UART1_TX, TIM1_CH2, USB_VBUS, PWM | Same signal as Arduino pin D8. | |
| PB2 | 18 | GPIO, BOOT1 | BOOT1: only matters when BOOT0 is HIGH at reset. Normal pin otherwise. | |
| PA8 | 8 | GPIO, TIM1_CH1, I2C3_SCL, UART1_CK, MCO1, PWM | Same signal as Arduino pin D7. | |
| PB1 | 17 | GPIO, ADC1_IN9, TIM3_CH4, TIM1_CH3N, PWM | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. | |
| PB10 | 26 | GPIO, I2C2_SCL, SPI2_SCK, TIM2_CH3, PWM | Same signal as Arduino pin D6. | |
| PB15 | 31 | GPIO, SPI2_MOSI, TIM1_CH3N, PWM | ||
| PB4 | 20 | GPIO, TIM3_CH1, SPI1_MISO, SPI3_MISO, I2C3_SDA, PWM | Same signal as Arduino pin D5. | |
| PB14 | 30 | GPIO, SPI2_MISO, TIM1_CH2N, PWM | ||
| PB5 | 21 | GPIO, TIM3_CH2, SPI1_MOSI, SPI3_MOSI, PWM | Same signal as Arduino pin D4. | |
| PB13 | 29 | GPIO, SPI2_SCK, TIM1_CH1N, PWM | ||
| PB3 | 19 | GPIO, SWO, TIM2_CH2, SPI1_SCK, SPI3_SCK, I2C2_SDA, PWM | Same signal as Arduino pin D3. | |
| AGND | — | Analog ground (joined to GND). | ||
| PA10 | 10 | GPIO, UART1_RX, TIM1_CH3, USB_ID, PWM | Same signal as Arduino pin D2. | |
| PC4 | 36 | GPIO, ADC1_IN14 | 5 V tolerant only as a digital input. As an analog input keep it between 0 and 3.3 V. | |
| PA2 | 2 | GPIO, ADC1_IN2, UART2_TX, TIM2_CH3, TIM5_CH3, TIM9_CH1, PWM | Same signal as Arduino pin D1. Not connected to this header by default: PA3/PA2 go to the ST-LINK USB serial port (solder bridges SB13/SB14 on, SB62/SB63 off). Serial uses them. | |
| PA3 | 3 | GPIO, ADC1_IN3, UART2_RX, TIM2_CH4, TIM5_CH4, TIM9_CH2, PWM | Same signal as Arduino pin D0. Not connected to this header by default: PA3/PA2 go to the ST-LINK USB serial port (solder bridges SB13/SB14 on, SB62/SB63 off). Serial uses them. |
Check your wiring with BoardPilot
BoardPilot shows this board in 3D, flags risky pins as you wire, and flashes it safely with a backup first.
Download BoardPilotSources
- ST UM1724 STM32 Nucleo-64 boards (MB1136), Rev 13, Table 16 Arduino connectors on NUCLEO-F401RE; Table 29 ST morpho connector; Figure 18
- ST UM1724, Rev 13, Figure 5 mechanical dimensions; 6.4 LEDs; 6.5 push-buttons; 6.7 OSC clock; 6.8 USART; Table 10 solder bridges; Table 7 external power
- ST STM32F401xD/xE datasheet DS10086 (DocID025644 Rev 3), Table 8 pin definitions (FT I/O structure, notes 2-4), ADC1_IN channels
- stm32duino Arduino_Core_STM32, variants/STM32F4xx/F401R(B-C-D-E)T/variant_NUCLEO_F401RE.h/.cpp; cores/arduino/pins_arduino.h (PIN_WIRE_SDA 14, PIN_WIRE_SCL 15, SPI 10-13); boards.txt Nucleo_64
- OpenOCD contrib/60-openocd.rules, ST-LINK/V2.1 USB ids 0483:374b, 0483:3752
- Board data file and source notes on GitHub