The Arduino Portenta H7 is a high-performance dual-core board based on the STM32H747XI.
Its architecture combines:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Arm Cortex-M7 → up to 480 MHz Arm Cortex-M4 → up to 240 MHz 8 MB external SDRAM 16 MB external NOR Flash Wi-Fi + Bluetooth 10/100 Ethernet PHY USB-C two 80-pin high-density connectors |
The board keeps the narrow Arduino MKR-style header layout, but most of its capability is exposed through the two high-density connectors underneath.
Quick Portenta H7 Specifications
| Feature | Portenta H7 |
|---|---|
| Main MCU | STM32H747XI |
| High-performance core | Cortex-M7 up to 480 MHz |
| Real-time core | Cortex-M4 up to 240 MHz |
| Internal MCU Flash | 2 MB class STM32H747 internal Flash |
| Internal MCU RAM | 1 MB class STM32H747 SRAM |
| External SDRAM | 8 MB |
| External NOR Flash | 16 MB |
| Logic voltage | 3.3 V |
| MKR-style digital pins | D0-D14 |
| MKR analogue pins | A0-A6 |
| Additional analogue pin | A7 on high-density connector |
| Default ADC resolution in current Arduino core | 12-bit |
| STM32 ADC capability | Up to 16-bit, 3 ADCs, up to 36 channels |
| DAC | 2 × 12-bit in MCU; one user-accessible as A6 |
| UART | 4 hardware ports exposed across headers/connectors |
| I2C | Multiple buses |
| SPI | Main MKR SPI plus high-density SPI signals |
| CAN | CAN TX/RX on high-density connector; external transceiver required |
| Ethernet | 10/100 PHY; external connector/magnetics via carrier |
| USB-C | Host/device, High/Full Speed, DisplayPort output |
| Wireless | Murata 1DX Wi-Fi + Bluetooth |
| Battery | Single-cell 3.7 V Li-Po, integrated charger |
Portenta H7 Uses 3.3 V Logic
The most important electrical rule is:
|
1 2 3 4 5 |
GPIO logic → 3.3 V |
Do not treat Portenta H7 as a 5 V Arduino simply because it exposes:
|
1 2 3 4 5 |
5 V VIN |
power connections.
Check voltage compatibility before connecting:
- 5 V sensors;
- older Arduino shields;
- UART modules;
- SPI devices;
- I2C boards with 5 V pull-ups.
GPIO Current Limits
Arduino’s current full pinout warns that:
|
1 2 3 4 5 6 7 8 9 10 11 |
20 mA maximum per individual I/O/control pin 140 mA maximum total sourced by all I/O/control pins 140 mA maximum total sunk by all I/O/control pins |
These are limits, not design targets.
For:
- relays;
- motors;
- solenoids;
- large LEDs;
- high-current loads;
use an external transistor, MOSFET or driver.
Main MKR-Style Digital Pin Mapping
The top headers expose:
|
1 2 3 4 |
D0-D14 |
with the following current Arduino-core mappings:
| Arduino pin | STM32H747 pin | Main documented function |
|---|---|---|
| D0 | PH15 | PWM |
| D1 | PK1 | PWM |
| D2 | PJ11 | PWM |
| D3 | PG7 | PWM |
| D4 | PC7 | PWM |
| D5 | PC6 | PWM |
| D6 | PA8 | PWM |
| D7 | PI0 | SPI chip select |
| D8 | PC3 | SPI COPI / MOSI |
| D9 | PI1 | SPI SCK |
| D10 | PC2 | SPI CIPO / MISO |
| D11 | PH8 | I2C SDA |
| D12 | PH7 | I2C SCL |
| D13 | PA10 | UART RX |
| D14 | PA9 | UART TX |
PWM on the Main Header
Arduino’s full pinout marks:
|
1 2 3 4 5 6 7 8 9 10 |
D0 D1 D2 D3 D4 D5 D6 |
as the main MKR-header PWM outputs.
The high-density connectors expose additional PWM signals.
This is useful when the normal MKR header does not provide enough timer outputs.
Analog Inputs
The main MKR-style header exposes:
|
1 2 3 4 |
A0-A6 |
and the Arduino core also defines:
|
1 2 3 4 |
A7 |
on the high-density connector.
| Analog pin | STM32H747 pin | ADC function |
|---|---|---|
| A0 | PA0_C | ADC2_INP0 |
| A1 | PA1_C | ADC2_INP1 |
| A2 | PC2_C | ADC3_INP0 |
| A3 | PC3_C | ADC3_INP1 |
| A4 | PC2 | ADC1_INP12 |
| A5 | PC3 | ADC1_INP13 |
| A6 | PA4 | ADC1_INP18 / DAC1_OUT1 |
| A7 | PA6 | ADC1_INP7, high-density connector |
Default Arduino ADC Resolution
The current Arduino Mbed core defines:
|
1 2 3 4 5 |
ADC_RESOLUTION → 12 bits |
for Portenta H7.
That means ordinary:
|
1 2 3 4 |
analogRead() |
uses a 12-bit default Arduino resolution unless changed by supported APIs.
STM32H747 ADC Hardware Is More Capable
The MCU itself contains:
|
1 2 3 4 5 6 7 |
3 ADCs up to 16-bit resolution up to 36 channels up to approximately 3.6 MSPS |
according to Arduino’s Portenta specification.
The exact resolution, sampling rate and channel availability depend on the selected ADC instance and software configuration.
A6 Is a True DAC Output
The STM32H747 contains:
|
1 2 3 4 |
2 × 12-bit DAC channels |
but Arduino exposes one DAC channel to the user as:
|
1 2 3 4 5 6 |
A6 → PA4 → DAC1_OUT1 |
This is a genuine analogue voltage output, not PWM.
Why Only One DAC Appears on the Header
The MCU has two DAC channels internally, but the Portenta board routing exposes only one through the normal external user connection.
So for normal Arduino use:
|
1 2 3 4 5 |
A6 → user-accessible DAC |
is the important mapping.
SPI on the MKR Header
The default Arduino SPI mapping is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
D7 → CS → PI0 D8 → COPI / MOSI → PC3 D9 → SCK → PI1 D10 → CIPO / MISO → PC2 |
Use:
|
1 2 3 4 |
#include <SPI.h> |
SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <SPI.h> const int csPin = 7; void setup() { pinMode(csPin, OUTPUT); digitalWrite(csPin, HIGH); SPI.begin(); } void loop() { } |
Additional SPI Signals on the High-Density Connector
The J2 connector also exposes a dedicated set labelled:
|
1 2 3 4 5 6 7 |
SPI1 CS SPI1 CK SPI1 CIPO SPI1 COPI |
These signals are useful for carrier boards and custom hardware.
Do not assume every exposed hardware bus automatically has a pre-created Arduino object with the same printed bus number.
Check the current Arduino core when using non-default buses.
I2C on the Main Header
The normal Arduino:
|
1 2 3 4 |
Wire |
bus uses:
|
1 2 3 4 5 6 7 8 9 10 |
D11 → SDA → PH8 D12 → SCL → PH7 |
I2C Example
|
1 2 3 4 5 6 7 8 9 10 11 |
#include <Wire.h> void setup() { Wire.begin(); } void loop() { } |
Multiple I2C Buses
The high-density connectors expose additional I2C signals labelled:
|
1 2 3 4 5 6 |
I2C0 I2C1 I2C2 |
while the MKR-header D11/D12 connection is labelled:
|
1 2 3 4 |
I2C3 |
on Arduino’s physical pinout.
The Arduino software objects do not necessarily use the same numbering convention as the board silkscreen/STM32 peripheral labels.
Use the current core definitions when selecting:
|
1 2 3 4 5 6 |
Wire Wire1 Wire2 |
UART on the Main Header
The default hardware serial port is:
|
1 2 3 4 5 6 7 8 9 10 |
D13 → RX → PA10 D14 → TX → PA9 |
and is exposed in the current core as:
|
1 2 3 4 |
Serial1 |
USB Serial
The USB-C virtual serial interface is:
|
1 2 3 4 |
SerialUSB |
and is the normal USB monitor connection.
Additional UARTs
The Portenta high-density connectors expose multiple additional UART groups:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
UART0 → TX / RX / RTS / CTS UART1 → TX / RX / RTS / CTS UART2 → TX / RX UART3 → TX / RX |
Arduino’s product specification describes:
|
1 2 3 4 5 |
4 UART ports 2 with hardware flow control |
CAN Bus
The high-density connector exposes:
|
1 2 3 4 5 6 7 8 |
CAN1 TX → PH13 CAN1 RX → PB8 |
The current Arduino Mbed core creates a:
|
1 2 3 4 |
CAN |
interface using those pins.
CAN Requires a Transceiver
The Portenta pins are MCU-level:
|
1 2 3 4 5 |
CAN TX CAN RX |
not:
|
1 2 3 4 5 |
CANH CANL |
You still need an external CAN transceiver or a carrier board that provides one.
Ethernet
Portenta H7 includes an onboard:
|
1 2 3 4 |
10/100 Mbps Ethernet PHY |
but there is no RJ45 socket directly on the module.
The differential Ethernet signals are exposed through the high-density connector.
A carrier board provides:
- RJ45 connector;
- magnetics;
- mechanical interface;
- other supporting hardware.
Ethernet High-Density Signals
Arduino’s current pinout exposes signals including:
|
1 2 3 4 5 6 7 8 9 |
ETH A+ ETH A- ETH B+ ETH B- ETH L1 ETH L2 |
on J1.
USB-C Is a Multipurpose Port
The Portenta USB-C connector supports:
- programming;
- USB device mode;
- USB host mode;
- High-Speed / Full-Speed USB;
- DisplayPort video output;
- power.
This is much more capable than a simple USB-to-serial connector.
Additional USB Signals on the High-Density Connector
The high-density connectors also expose additional USB signals such as:
|
1 2 3 4 5 6 7 8 9 10 |
USB0 D+ USB0 D- USB1 VBUS USB1 D+ USB1 D- USB1 ID |
which allow carrier boards to expose additional USB functions.
Display Interface
The J1 high-density connector exposes:
|
1 2 3 4 5 6 7 8 9 |
DSI D1+ DSI D1- DSI D0+ DSI D0- DSI CK+ DSI CK- |
for a MIPI DSI display interface.
This allows high-bandwidth display connections without consuming a large parallel GPIO bus.
DisplayPort over USB-C
The board can also output:
|
1 2 3 4 |
DisplayPort |
through the USB-C connector.
This is supported by the STM32H747 graphics/display architecture and the board’s USB-C routing.
Camera Interface
The J2 connector exposes an 8-bit camera interface:
|
1 2 3 4 5 6 7 |
CAM D0-D7 CAM CLK CAM HS CAM VS |
Arduino rates the camera interface at up to:
|
1 2 3 4 |
80 MHz |
for suitable external camera hardware.
Portenta Vision Shield
The Arduino Portenta Vision Shield makes these high-density interfaces easier to use by adding:
- 320 × 320 camera;
- two microphones;
- SD-card connector;
- Ethernet on the Ethernet version;
- JTAG connector.
This is often the easiest path for machine-vision experiments.
SD Card Interface
The high-density connector exposes a native SD interface:
|
1 2 3 4 5 6 7 8 9 10 |
SDC CLK SDC CMD SDC D0 SDC D1 SDC D2 SDC D3 V-SDCARD |
A carrier board or Vision Shield can turn these signals into a physical SD-card socket.
I2S and SAI Audio
The high-density connectors expose digital-audio signals including:
|
1 2 3 4 5 6 7 |
I2S MCK I2S WS I2S DI I2S DO |
and another:
|
1 2 3 4 5 6 |
SAI CK SAI FS SAI D0 |
group.
These are useful for:
- audio codecs;
- digital microphones;
- multi-channel audio;
- DSP applications.
Digital Microphone Interface
The J1 connector also exposes:
|
1 2 3 4 5 |
DMIC CK DMIC D0 |
for digital microphone applications.
High-Density GPIO
J2 includes additional general-purpose signals labelled:
|
1 2 3 4 5 6 7 8 9 10 |
GPIO 0 GPIO 1 GPIO 2 GPIO 3 GPIO 4 GPIO 5 GPIO 6 |
plus extra PWM and analogue signals.
This is why the two 80-pin connectors are the real expansion interface for Portenta.
High-Density PWM
Arduino’s full pinout labels additional PWM outputs:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PWM 0 PWM 1 PWM 2 PWM 3 PWM 4 PWM 5 PWM 6 PWM 7 PWM 8 PWM 9 |
across the high-density connection.
These are particularly useful in carrier-board designs.
Debug Signals
The connector exposes:
|
1 2 3 4 5 6 7 |
SWDIO SWCLK SWO RESET |
for low-level debugging and programming.
These are valuable when developing:
- custom bootloaders;
- real-time firmware;
- dual-core applications;
- production test fixtures.
Dual-Core STM32H747
The Portenta H7 contains:
|
1 2 3 4 5 6 7 8 |
Cortex-M7 → 480 MHz Cortex-M4 → 240 MHz |
The cores can run separate workloads and communicate through an inter-core mechanism such as Arduino’s RPC facilities.
Typical Dual-Core Split
A practical architecture is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
M7 → networking → graphics → USB → machine learning → filesystem → high-level application M4 → motor control → sensor acquisition → deterministic timing → CAN → low-latency I/O |
This is not mandatory, but it is a natural way to use the two processors.
Peripheral Ownership Matters
Do not blindly initialise the same peripheral from both cores.
A sensible design gives each shared resource one clear owner:
|
1 2 3 4 5 6 7 8 9 |
UART SPI I2C CAN timer GPIO group |
and exchanges data between cores instead.
External Memory
The default Portenta H7 configuration includes:
|
1 2 3 4 5 |
8 MB SDRAM 16 MB NOR Flash |
in addition to the STM32H747’s internal memories.
This gives far more room than a conventional microcontroller board for:
- framebuffers;
- TensorFlow Lite models;
- large filesystems;
- network buffers;
- image processing;
- MicroPython.
Wireless Connectivity
The board uses the:
|
1 2 3 4 |
Murata 1DX |
module for:
|
1 2 3 4 5 6 7 |
2.4 GHz Wi-Fi 802.11 b/g/n Bluetooth Bluetooth Low Energy |
Arduino documents Wi-Fi throughput up to around:
|
1 2 3 4 |
65 Mbps |
under the module’s supported conditions.
External Antenna
The default Portenta H7 configuration includes an external antenna connection for the wireless module.
Use the intended antenna and connector rather than assuming the PCB itself is a complete high-performance RF antenna system.
Secure Element
The current default Portenta H7 configuration uses an:
|
1 2 3 4 |
NXP SE050-class secure element |
for hardware-assisted:
- device identity;
- private keys;
- certificates;
- secure cloud authentication.
Battery Support
The board supports a:
|
1 2 3 4 |
3.7 V single-cell Li-Po |
with integrated charging.
Arduino specifies a recommended minimum capacity of:
|
1 2 3 4 |
700 mAh |
VIN Power
Portenta VIN expects a:
|
1 2 3 4 |
regulated 5 V supply |
with Arduino specifying approximately:
|
1 2 3 4 |
5-6 V maximum range |
for that input.
Do not treat VIN like the 7-12 V input of a classic UNO.
5 V Pin
The 5 V header pin is an:
|
1 2 3 4 |
output |
when the board is powered from USB or VIN.
Arduino notes that it is taken directly from the input supply and is not a separately regulated 5 V logic rail.
Common Mistake 1: Applying 5 V to GPIO
Portenta H7 is fundamentally a:
|
1 2 3 4 |
3.3 V logic board |
Use appropriate level shifting where required.
Common Mistake 2: Assuming the MKR Headers Expose Everything
The small top headers expose only a subset of the STM32H747.
Major features such as:
- Ethernet;
- CAN;
- camera;
- DSI;
- SDIO;
- additional UARTs;
- extra GPIO;
are primarily available through the high-density connectors.
Common Mistake 3: Connecting CANH/CANL Directly
CAN TX/RX are logic-level controller signals.
A physical CAN transceiver is still required.
Common Mistake 4: Expecting an RJ45 Socket on the Module
The Portenta includes the Ethernet PHY, but a carrier board is needed to expose the physical network connector and magnetics.
Common Mistake 5: Assuming Every Hardware Bus Has a Matching Arduino Object
The STM32H747 exposes many peripherals through the high-density connector.
The standard Arduino core creates default objects for the common buses, but custom carrier-board work may require:
- additional Mbed objects;
- custom pin assignments;
- lower-level STM32 configuration.
Common Mistake 6: Treating the Second Core as Automatic Extra Speed
Two cores only help if the firmware is deliberately partitioned.
A single-threaded sketch does not automatically become:
|
1 2 3 4 |
480 + 240 MHz |
just because both cores exist.
Common Mistake 7: Sharing a Peripheral Between Cores Without Coordination
Give each peripheral one owner and exchange data through RPC/shared-memory mechanisms.
Quick Main-Header Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
D0 PH15 PWM D1 PK1 PWM D2 PJ11 PWM D3 PG7 PWM D4 PC7 PWM D5 PC6 PWM D6 PA8 PWM D7 PI0 SPI CS D8 PC3 SPI COPI D9 PI1 SPI SCK D10 PC2 SPI CIPO D11 PH8 I2C SDA D12 PH7 I2C SCL D13 PA10 UART RX D14 PA9 UART TX |
Quick Analog Reference
|
1 2 3 4 5 6 7 8 9 10 11 |
A0 PA0_C ADC2_INP0 A1 PA1_C ADC2_INP1 A2 PC2_C ADC3_INP0 A3 PC3_C ADC3_INP1 A4 PC2 ADC1_INP12 A5 PC3 ADC1_INP13 A6 PA4 ADC1_INP18 / DAC1_OUT1 A7 PA6 ADC1_INP7 / high-density |
Quick High-Density Interface Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
J1 / J2 expose: 10/100 Ethernet CAN TX/RX USB0 / USB1 MIPI DSI 8-bit camera SDIO UART0-UART3 groups I2C0-I2C2 additional SPI I2S SAI digital microphone GPIO PWM ADC SWD / SWO power rails reset / boot control |
Final Thoughts
The Arduino Portenta H7 is best understood as:
|
1 2 3 4 5 6 |
a dual-core STM32H747 compute module with MKR-compatible headers plus two industrial high-density expansion connectors |
The main MKR header is convenient for conventional Arduino work:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SPI → D7-D10 I2C → D11-D12 UART → D13-D14 ADC → A0-A6 DAC → A6 |
but the Portenta’s real capability appears on the underside:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Ethernet CAN camera display SD multiple UART/I2C buses audio debug extra GPIO extra PWM |
For industrial carrier-board design, those two 80-pin connectors are more important than the familiar MKR pins.
For a direct comparison with Arduino’s larger maker-oriented STM32H747 board, see our Arduino GIGA R1 WiFi vs Portenta H7 comparison. For the related STM32H747 main-header mappings, see the Arduino GIGA R1 WiFi pinout guide.