Board Identification
The NUCLEO-F446RE is an STMicroelectronics Nucleo-64 development board fitted with an STM32F446RET6 microcontroller (Arm Cortex-M4 with floating-point unit, LQFP64 package). It provides Arduino Uno V3-style connectors, ST morpho expansion headers and an on-board ST-LINK debugger/programmer. The board is not an Arduino Uno: the STM32 GPIO signals operate in a 3.3 V domain.
| Item | Reference |
|---|---|
| MCU | STM32F446RET6 |
| CPU | Arm Cortex-M4F |
| On-chip Flash | 512 KB |
| On-chip SRAM | 128 KB |
| Board expansion | Arduino Uno V3-compatible connector layout; ST morpho headers |
| Programming/debug | Integrated ST-LINK, SWD |
| User LED LD2 | PA5 (active high) |
| User push-button B1 | PC13 |
| Default virtual COM port | USART2, PA2 TX / PA3 RX, subject to solder-bridge routing |
| Main GPIO logic domain | 3.3 V; individual 5 V tolerance is pin- and mode-dependent |
Board revision matters. Connector labels, solder-bridge defaults, clock routing and ST-LINK implementation must be checked against the schematic and user manual for the actual NUCLEO-F446RE board revision. The pin tables below describe the usual Nucleo-64 Arduino connector assignments, not every alternate function supported by the MCU.
Arduino Digital Connector Mapping
The Arduino D names are board connector labels. STM32 firmware normally refers to the corresponding GPIO port and pin. Alternate peripheral functions require the correct STM32 alternate-function configuration.
| Arduino label | STM32 GPIO | Common role or observation |
|---|---|---|
| D0 | PA3 | USART2_RX; shared with ST-LINK VCP routing on standard configuration |
| D1 | PA2 | USART2_TX; shared with ST-LINK VCP routing on standard configuration |
| D2 | PA10 | Digital I/O; alternate peripheral functions available |
| D3 | PB3 | Digital I/O; timer function available |
| D4 | PB5 | Digital I/O |
| D5 | PB4 | Digital I/O; timer function available |
| D6 | PB10 | Digital I/O; timer function available |
| D7 | PA8 | Digital I/O; timer function available |
| D8 | PA9 | Digital I/O |
| D9 | PC7 | Digital I/O; timer function available |
| D10 | PB6 | Common Arduino SPI chip-select position; GPIO unless configured otherwise |
| D11 | PA7 | SPI1_MOSI alternate function |
| D12 | PA6 | SPI1_MISO alternate function |
| D13 | PA5 | SPI1_SCK alternate function; also LD2 user LED |
| D14 / SDA | PB9 | I2C1_SDA alternate function |
| D15 / SCL | PB8 | I2C1_SCL alternate function |
D13 conflict: PA5 is connected to LD2. Using SPI1_SCK on D13 can toggle the LED, and the LED circuit adds a small load. Avoid assuming that D13 is an otherwise unconnected clock signal.
D0/D1 conflict: The on-board ST-LINK virtual COM port normally uses USART2 on PA2/PA3. An external UART device connected to these pins can conflict with the debugger’s UART connections, particularly if two outputs drive the same line. Check solder bridges before rerouting USART2.
Arduino Analogue Connector Mapping
| Arduino label | STM32 GPIO | ADC channel on STM32F446 |
|---|---|---|
| A0 | PA0 | ADC input channel 0 |
| A1 | PA1 | ADC input channel 1 |
| A2 | PA4 | ADC input channel 4 |
| A3 | PB0 | ADC input channel 8 |
| A4 | PC1 | ADC input channel 11 |
| A5 | PC0 | ADC input channel 10 |
These labels refer to MCU ADC-capable pins, not to a separate analogue converter on the board. STM32F446 ADCs support up to 12-bit conversion resolution. Select the correct ADC instance and channel in the device configuration; conversion timing, source impedance and sampling time affect measured accuracy.
Analogue input limits: Keep input voltages within the permitted range for the selected pin and the MCU’s analogue supply/reference arrangement. Do not apply 5 V to an ADC input. Analogue-capable pins are not automatically 5 V tolerant in analogue mode.
Power, Ground and Control Connections
| Connector marking | Function | Engineering note |
|---|---|---|
| 3V3 | Regulated 3.3 V rail | Supply capability depends on board power configuration and loading |
| 5V | Board 5 V rail | Source/direction depends on USB or external power selection |
| VIN | External supply input | Use only the voltage range and jumper configuration permitted by the board manual |
| GND | Ground reference | Common ground required for external interfaces |
| RESET | MCU reset | Active-low reset signal |
| IOREF | Expansion I/O reference | Indicates the board’s 3.3 V I/O level |
| AREF | Arduino-style analogue reference header position | Do not assume an Uno-style independently adjustable ADC reference; inspect board routing |
The board may be powered from its ST-LINK USB connector or supported external supply paths. Do not connect multiple supplies without checking the board’s power-selection arrangement. The 5V pin is not a general-purpose 5 V-tolerant GPIO signal. A 5 V Arduino shield may fit mechanically while driving incompatible voltage levels into the STM32.
ST Morpho Headers
The two ST morpho connectors expose additional STM32 signals beyond the Arduino headers, including GPIO, power, reset and debug-related connections. Some signals appear on both connector systems. Reusing a duplicated GPIO does not create a second independent pin.
| Signal class | Typical use | Check before connecting |
|---|---|---|
| Additional GPIO ports | Digital inputs, outputs and alternate functions | Package availability and connector position |
| Timer-capable pins | PWM, capture, encoder interfaces | Timer instance, channel and alternate-function selection |
| UART / SPI / I2C | Additional serial interfaces | Pin multiplexing and conflicts with board circuitry |
| ADC inputs | Analogue measurement | Pin voltage, ADC channel and board loading |
| SWD signals | Programming and debugging | Avoid loading SWDIO/SWCLK during development |
| Power and reset | External circuits and reset control | Rail direction, current budget and reset polarity |
For exact CN7/CN10 physical pin numbers, use the NUCLEO-F446RE schematic and board pinout for the relevant PCB revision. The Arduino D/A labels above must not be mistaken for ST morpho connector pin numbers.
Peripheral Pin Groups
| Interface | Common connector assignment | Firmware requirement |
|---|---|---|
| USART2 | PA2 TX / PA3 RX, D1 / D0 | Enable USART2 and configure GPIO alternate functions |
| I2C1 | PB8 SCL / PB9 SDA, D15 / D14 | Open-drain operation with suitable pull-ups |
| SPI1 | PA5 SCK / PA6 MISO / PA7 MOSI, D13 / D12 / D11 | Configure SPI1 and corresponding alternate functions |
| SPI chip select | PB6, D10 | Usually controlled as ordinary GPIO |
| User LED | PA5 | Output high turns LD2 on |
| User button | PC13 | Read GPIO input; account for button polarity and debounce |
These are convenient board-level combinations, not the only possible peripheral mappings. A GPIO can support several alternate functions, but only one active pin function at a time. Confirm the alternate-function number using the STM32F446 datasheet or a correctly configured STM32CubeMX project.
I2C Electrical Behaviour
I2C requires pull-up resistors to the appropriate logic rail. Do not assume the MCU’s weak internal pull-ups are suitable for the intended bus speed and capacitance. For a 3.3 V bus, use pull-ups to 3.3 V and check whether an attached module already includes them. Verify peripheral voltage compatibility before connecting a 5 V I2C breakout.
PWM Is Not Available on Every Pin
A pin produces hardware PWM only when it has an appropriate timer-channel alternate function and the chosen timer/channel is configured. An Arduino-style analogWrite() pin list from another board is not a reliable STM32 hardware reference. Timer allocation, frequency, duty-cycle resolution and shared timer periods should be checked in the MCU reference manual.
On-board Resources and Debug Routing
| Resource | Connection or behaviour | Practical implication |
|---|---|---|
| LD2 user LED | PA5 | Can conflict with SPI1_SCK / D13 use |
| B1 user button | PC13 | Input transitions may bounce; debounce in firmware |
| ST-LINK | SWD interface to target MCU | Supports programming and breakpoints without external probe |
| ST-LINK VCP | Usually USART2 PA2 / PA3 | Serial monitor may occupy Arduino D0 / D1 |
| Reset button | Target reset | Useful when firmware disables expected I/O or clocks |
| Oscillator/clock inputs | Board-revision and solder-bridge dependent | Do not assume an external crystal is fitted or enabled |
The MCU can use internal oscillators. High-speed external clock arrangements differ across Nucleo board configurations, including ST-LINK-generated clock options. Select the clock source that is actually connected and enabled on the board, and check PLL settings against the STM32F446 clock limits.
GPIO Configuration Reference
For STM32Cube HAL, a GPIO output must have its peripheral clock enabled before initialisation. The following example controls LD2 on PA5 using STM32F4 HAL. It assumes the project already supplies the device startup code and HAL timebase.
#include "stm32f4xx_hal.h"
void led_init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef pin = {0};
pin.Pin = GPIO_PIN_5;
pin.Mode = GPIO_MODE_OUTPUT_PP;
pin.Pull = GPIO_NOPULL;
pin.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &pin);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
void led_set(uint8_t on)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,
on ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
The same PA5 pin can be configured for SPI1_SCK, but doing so replaces the GPIO output function. Do not attempt to operate LD2 independently while PA5 is assigned to the SPI peripheral.
Pin Selection Checklist
- Locate the connector label on the NUCLEO-F446RE silkscreen or schematic.
- Translate the connector label to its STM32 GPIO name, such as D11 to PA7.
- Check that the signal is actually available in the STM32F446RET6 LQFP64 package.
- Confirm the required peripheral instance and alternate-function assignment.
- Identify any shared on-board connection: LED, user button, VCP, oscillator or debug.
- Verify input voltage, output drive and any external pull-up or level-shifting requirements.
- Configure the GPIO clock, pin mode, pull setting, speed and peripheral clocks.
- Test the signal at the intended connector, not merely at a similarly named MCU pad.
Fault-Finding Reference
| Symptom | Likely cause | Specific check or correction |
|---|---|---|
| LD2 does not toggle | PA5 clock or output mode missing | Enable GPIOA clock and initialise PA5 as push-pull output |
| Serial monitor shows nothing | Wrong USART instance, baud rate or VCP routing | Confirm USART2 PA2/PA3, terminal settings and board solder bridges |
| External UART gives corrupted data | Voltage or common-ground issue; two TX outputs connected | Confirm 3.3 V logic, shared ground and correct TX-to-RX crossing |
| I2C devices not detected | Missing pull-ups or wrong SDA/SCL assignment | Check PB9 SDA, PB8 SCL, pull-up voltage and bus idle levels |
| SPI transfer fails | Incorrect alternate function, mode or chip-select handling | Check PA5/PA6/PA7 AF mapping, CPOL/CPHA and D10 CS control |
| ADC reads full scale or erratically | Input outside range, high source impedance or insufficient sampling time | Measure input voltage and review ADC sampling configuration |
| PWM absent on chosen pin | Pin lacks selected timer channel or AF is incorrect | Check MCU alternate-function table and timer channel selection |
| Debugger loses target | SWD pins repurposed, reset held or power absent | Check SWD routing, target supply and connect-under-reset option |
| Shield fits but behaves incorrectly | Assumed 5 V I/O or Uno-specific peripheral mapping | Verify every shield signal and level-shift where required |
| Clock initialisation fails | Firmware expects an unavailable external oscillator | Compare board oscillator routing with RCC clock-source settings |
Document and Naming Conventions
| Identifier | Meaning |
|---|---|
| PA5 | STM32 port A, bit 5 |
| GPIOA | GPIO peripheral register block for port A |
| D13 | Arduino digital connector position, mapped here to PA5 |
| A0 | Arduino analogue connector position, mapped here to PA0 |
| AF | GPIO alternate-function selection |
| USART2 | STM32 serial peripheral instance 2 |
| CN7, CN10 | ST morpho connector designators on Nucleo-64 boards |
| SWD | Serial Wire Debug programming/debug interface |
Use the STM32F446 device datasheet for electrical characteristics, package pin functions and alternate-function assignments; the STM32F446 reference manual for peripheral register behaviour; and the NUCLEO-F446RE board schematic/user manual for connector pin numbers, solder bridges and on-board wiring. A family-level pinout does not replace any of these device- and board-specific references.

