Arduino Portenta H7: Dual-Core Powerhouse for Advanced Embedded Projects
The Arduino Portenta H7 is a high-performance development board featuring a dual-core STM32H747XI microcontroller, designed for demanding industrial and advanced maker applications.

The Arduino Portenta H7 is a significant leap forward in the Arduino family, targeting professional developers, advanced makers, and embedded engineers who require substantial processing power and flexibility. Released around 2020, it bridges the gap between hobbyist boards and industrial-grade embedded systems. Its robust design and powerful dual-core processor make it suitable for complex tasks such as real-time control, machine learning at the edge, and advanced sensor fusion.
At the heart of the Portenta H7 is the STMicroelectronics STM32H747XI System-on-Chip (SoC). This powerful microcontroller boasts two ARM Cortex-M7 and Cortex-M4 cores, allowing for parallel processing and dedicated task management. The Cortex-M7 core runs at up to 480 MHz for high-performance computing, while the Cortex-M4 core, running at up to 240 MHz, is ideal for real-time signal processing and sensor management. This dual-core architecture enables sophisticated applications that might otherwise require a more complex embedded Linux system.
The Portenta H7 is positioned as a high-end board within the Arduino ecosystem, offering capabilities far beyond typical Arduino boards. It's designed to run complex software, including real-time operating systems (RTOS) like FreeRTOS, and can even host a Linux environment via an optional carrier board. This makes it an excellent choice for projects requiring low latency, high throughput, and advanced connectivity, such as industrial automation, robotics, advanced IoT devices, and edge AI applications. Its rugged design and wide operating temperature range also make it suitable for harsher environments.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | STMicroelectronics STM32H747XI |
| Architecture | Dual-core: 1x ARM Cortex-M7 @ 480 MHz, 1x ARM Cortex-M4 @ 240 MHz |
| Clock speed | Up to 480 MHz (M7 core) |
| Flash / Storage | 1MB Flash memory |
| RAM / SRAM | 320 KB SRAM |
| Operating voltage | 3.3V |
| Digital I/O pins | 50+ GPIOs available |
| Analog / ADC | 16-bit Analog-to-Digital Converters (ADCs) |
| PWM | Multiple hardware PWM channels |
| Connectivity | Wi-Fi 802.11n, Bluetooth 5.0, Ethernet (via expansion), CAN bus, RS485 (via expansion) |
| USB | 1x USB-C (for power and programming), 1x USB Host |
| Power input | 5V via USB-C, or 7-24V via VIN pin |
| Dimensions | 66.0mm x 25.0mm |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3V3 | 3.3V power output |
| GND | Ground |
| VIN | Input voltage (7-24V) |
| VBAT | Battery input (for RTC backup) |
| NRST | Reset pin |
| BOOT0 | Boot mode selection |
| D0 (RX1) | UART1 RX |
| D1 (TX1) | UART1 TX |
| D2 | GPIO |
| D3 | GPIO |
| D4 | GPIO |
| D5 | GPIO, PWM capable |
| D6 | GPIO, PWM capable |
| D7 | GPIO |
| D8 | GPIO |
| D9 | GPIO, PWM capable |
| D10 | GPIO, PWM capable |
| D11 | GPIO, PWM capable |
| D12 | GPIO, PWM capable |
| D13 | GPIO, PWM capable |
| D14 (SCL) | I2C1 SCL |
| D15 (SDA) | I2C1 SDA |
| A0 | Analog Input, ADC capable |
| A1 | Analog Input, ADC capable |
| A2 | Analog Input, ADC capable |
| A3 | Analog Input, ADC capable |
| A4 | Analog Input, ADC capable |
| A5 | Analog Input, ADC capable |
| A6 | Analog Input, ADC capable |
| A7 | Analog Input, ADC capable |
| SPI1 MOSI | SPI1 MOSI |
| SPI1 MISO | SPI1 MISO |
| SPI1 SCK | SPI1 SCK |
| SPI1 CS | SPI1 Chip Select |
| I2C3 SCL | I2C3 SCL |
| I2C3 SDA | I2C3 SDA |
| CAN_H | CAN Bus High |
| CAN_L | CAN Bus Low |
| ETH_TXD0 | Ethernet TX Data 0 |
| ETH_TXD1 | Ethernet TX Data 1 |
| ETH_TX_EN | Ethernet TX Enable |
| ETH_RXD0 | Ethernet RX Data 0 |
| ETH_RXD1 | Ethernet RX Data 1 |
| ETH_RX_DV | Ethernet RX Data Valid |
| ETH_CRS_DV | Ethernet Carrier Sense / Receive Data Valid |
| ETH_MDIO | Ethernet MDIO |
| ETH_MDC | Ethernet MDC |
| USB_DM | USB Data Minus |
| USB_DP | USB Data Plus |
Wiring & circuit basics
The Arduino Portenta H7 operates at a logic level of 3.3V. Connecting 5V devices directly to its GPIO pins can cause permanent damage. If you need to interface with 5V logic components, a level shifter is essential. Powering the board can be done via the USB-C port (5V) or through the VIN pin, which accepts a wider range of input voltages (typically 7-24V). The VIN pin is connected to an onboard voltage regulator that steps down the voltage to the required 3.3V for the microcontroller and other components. Ensure your power supply can provide sufficient current, especially if using peripherals that draw significant power.
When connecting external components, always observe the logic level compatibility. For example, to connect an LED, use a current-limiting resistor (typically 220-330 ohms for standard LEDs) in series with the LED and connect it to a 3.3V GPIO pin. The other end of the LED connects to the resistor, and the other end of the resistor connects to GND. If you're connecting an I2C sensor, such as a BME280, you'll typically use the SDA and SCL pins (e.g., D15 and D14). These pins are also connected to pull-up resistors, which are necessary for I2C communication. Ensure the sensor's operating voltage is compatible with 3.3V or use a level shifter if it's a 5V device.
For more complex peripherals like SPI devices, ensure you connect the MOSI, MISO, SCK, and CS pins correctly. The Portenta H7 also features CAN bus and Ethernet interfaces, which require specific wiring and potentially external transceivers or PHYs depending on the application. Always consult the Portenta H7's official documentation and the datasheets of your external components to ensure correct and safe wiring.
Programming & getting started
The Arduino Portenta H7 can be programmed using the Arduino IDE, which supports the board through an additional board manager URL. You'll need to install the Portenta H7 board support package. For more advanced development, PlatformIO, a popular IDE for embedded development, offers excellent support for the STM32 family, including the Portenta H7. MicroPython and CircuitPython are also viable options, offering a Python-based development environment that can be easier for rapid prototyping. To upload your first sketch (e.g., a simple Blink example), connect the Portenta H7 via USB-C to your computer, select the correct board and port in your IDE, and click the upload button. The board typically enters bootloader mode automatically for flashing.
For bare-metal or RTOS-based development, the STM32CubeIDE from STMicroelectronics is a powerful option, providing a full development suite including configuration tools, compilers, and debuggers. The dual-core nature of the STM32H747XI means you can develop applications that leverage both cores independently or cooperatively, often managed by an RTOS. Debugging can be performed using the onboard USB-serial interface or through dedicated SWD/JTAG connectors if available on expansion boards.