Skip to main content
Version: 0.2.60

STM32F413ZH Demo

The STM32F413ZH (STM32F4 family, Cortex-M4) is a common Nucleo and custom-board target. NoxTLS runs as a library linked into your STM32CubeIDE / CMake firmware; you provide HAL initialization, entropy, time, and network I/O.

Board coverage

This guide applies to STM32F413xx and closely related STM32F4 parts. Additional STM32 boards will get their own pages under Demos → STM32 as they are documented.

What you need​

ItemNotes
BoardNUCLEO-F413ZH or equivalent
ToolchainGNU Arm Embedded (arm-none-eabi-gcc)
HALSTM32CubeF4 HAL from ST
ProgrammerST-LINK (on-board on Nucleo)

Overview​

Your firmware
├── STM32Cube HAL / startup / linker script
├── Network stack (lwIP, Ethernet, Wi-Fi module, etc.)
└── NoxTLS (noxtls-lib + optional vendor/stm32 accel)

NoxTLS does not ship a full CubeMX project for every board; you add the library to an existing or new Cube project.

1. Create or open a Cube project​

  1. Generate a project for STM32F413ZHTx (or your exact part number) in STM32CubeMX / CubeIDE.
  2. Enable clocks, UART (for logs), and any Ethernet/Wi-Fi peripheral you use for TLS.
  3. Ensure enough RAM for TLS buffers and handshake state (start with a minimal TLS 1.3 client profile).

2. Add NoxTLS sources​

Option A — CMake subdirectory (if your firmware uses CMake):

add_subdirectory(path/to/noxtls)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE noxtls_tls noxtls_pkc noxtls_common)

Option B — CubeIDE: Add noxtls-lib/ sources and include paths manually, mirroring the groups in noxtls/CMakeLists.txt.

Set NOXTLS_OMIT_UT_SOURCES ON for firmware builds so unit-test-only files are excluded.

3. Configure features for MCU flash​

Use a constrained profile in noxtls_config.h or CMake:

-D NOXTLS_PROFILE=minimal_tls_client
-D BUILD_APPLICATIONS=OFF
-D BUILD_TESTS=OFF

Enable only TLS/DTLS versions and algorithms your product needs. See Configuration Guide.

4. STM32F4 hardware acceleration (optional)​

NoxTLS includes STM32 family backends under noxtls/vendor/st/:

FamilyTypical use
STM32F2CRYP/AES via HAL where available
STM32F4AES block acceleration for F4-class parts
STM32F7 / H7 / L4+Additional backends as enabled in your build

For STM32F413, define the family macros your build expects (for example NOXTLS_STM32_FAMILY_F4) and link the matching noxtls_stm32f4_accel.c (and shared noxtls_stm32_accel.c) when integrating vendor sources. Include STM32 HAL CRYP/AES headers and enable HAL_CRYP_MODULE_ENABLED in stm32f4xx_hal_conf.h if you rely on hardware AES.

If acceleration is disabled or HAL is unavailable, NoxTLS falls back to portable C implementations.

5. Platform hooks​

HookSTM32 approach
EntropyTRNG (RNG peripheral) if present on your variant; otherwise seed DRBG from a secure bootloader or hybrid TRNG+CRC
TimeRTC for certificate validity; or disable time checks only in bring-up builds (NOXTLS_HAVE_TIME)
MemoryStatic pools or malloc from newlib; avoid fragmentation in long-running TLS sessions
TLS I/OSend/receive callbacks on top of lwIP sockets, AT modem TLS offload, or raw Ethernet driver

See Porting Guide and Port NoxTLS to Your Platform.

6. Validate on the board​

Suggested bring-up order:

  1. Crypto smoke test — Run a small self-test (AES-GCM + SHA-256 known answer) on the target before enabling TLS.
  2. TLS client — Connect to a host HTTPS server using the same flow as Host Computer https_client, with your socket layer.
  3. DTLS (if used) — Tune MTU and retransmit for your link; see DTLS on embedded.

UTNox on-target tests (optional)​

The repository UTNox driver supports an stm32f4xx target profile (GNU Arm + ST-LINK flash). Use it to run registered unit tests over UART/SPI from a host PC:

  • Target definition: utnox/driver/targets.json → stm32f4xx
  • Flash via st-flash at 0x08000000 per target steps

This is ideal for regression on real silicon without porting the full host ctest suite.

7. Example integration checklist​

  • noxtls_config.h matches shipped features (no unused RSA/legacy ciphers)
  • Stack size and heap sized for peak handshake usage
  • Trust store and device cert stored in flash (DER)
  • SNI and hostname verification configured for production servers
  • Debug logging disabled in release builds

Adding more STM32 boards​

New pages under Demos → STM32 will document other parts (for example F7, H7, L4) with part-specific clock, accelerator, and memory notes. If you need a page for your MCU, use the same structure as this guide: Cube setup → NoxTLS link → config profile → hooks → validation.