Skip to content

Add STM32 MCU foundation#413

Merged
rolandreichweinbmw merged 2 commits into
eclipse-openbsw:mainfrom
nhuvaoanh123:stm32-pr-1
Jun 26, 2026
Merged

Add STM32 MCU foundation#413
rolandreichweinbmw merged 2 commits into
eclipse-openbsw:mainfrom
nhuvaoanh123:stm32-pr-1

Conversation

@nhuvaoanh123

@nhuvaoanh123 nhuvaoanh123 commented Mar 30, 2026

Copy link
Copy Markdown
Contributor

Purpose of this PR

  • Bugfix
  • New Feature
  • Documentation Update
  • Other (Please specify)

Description
First PR of the STM32 platform port. It adds the MCU foundation for
STM32G474RE (FDCAN) and STM32F413ZH (bxCAN):

  • ST CMSIS device headers under RIM control (cmsis_device_f4 v2.6.11,
    cmsis_device_g4 v1.2.6), with NOTICE.md entry and LICENSE
  • mcu/mcu.h wrapper; the shared CMSIS core from libs/3rdparty/cmsis
    (refactor: extract shared CMSIS to libs/3rdparty/cmsis #445) is reused, no local copy
  • Startup files, software reset wrapper, chip cmake modules, and the
    tests-stm32-debug/tests-stm32-release presets

Board executables and presets arrive in later PRs together with the
board code, so everything in this PR builds on its own.

Series overview:

PR Content Depends on
1 (this) MCU foundation
2 UART + GPIO + Clock BSP 1
3 bxCAN driver + unit tests 2
4 FDCAN driver + unit tests 2
5 HardFault handler + safety/watchdog 2
6 FreeRTOS board config (G474RE) 1–5
7 ThreadX board config 6
8 Second board (F413ZH) 6
9 CAN system + DoCAN transport 6
10 UDS services + HIL test qualification 9

Related Issues
Continues #408 (closed, split into this series). See also #394.

Breaking Changes

  • Yes
  • No

Test Plan

  1. cmake --preset tests-stm32-debug configures and builds
  2. The RIM CI check passes for the new ST header modules
  3. posix and S32K builds are unaffected

Regression Tests
Have tests been added/updated? [ ] Yes [x] No — unit tests come with
the drivers in PRs 3–4

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Introduces the initial STM32 Cortex‑M4 platform foundation for OpenBSW (NUCLEO‑G474RE and NUCLEO‑F413ZH), including CMSIS/ST device headers, startup code, linker scripts, and CMake integration/presets for cross-compiling.

Changes:

  • Adds STM32 platform selection + per-chip CMake configuration modules (STM32F413ZH / STM32G474RE).
  • Adds bspMcu with CMSIS/ST headers, startup assembly, linker scripts, and a software reset wrapper.
  • Adds STM32 CMake presets and root build integration for the new STM32 platforms.

Reviewed changes

Copilot reviewed 31 out of 34 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
platforms/stm32/CMakeLists.txt Adds STM32 platform entrypoint and chip selection via STM32_CHIP.
platforms/stm32/cmake/stm32g474re.cmake Defines STM32G474RE chip parameters and paths to startup/linker artifacts.
platforms/stm32/cmake/stm32f413zh.cmake Defines STM32F413ZH chip parameters and paths to startup/linker artifacts.
platforms/stm32/bsp/CMakeLists.txt Adds STM32 BSP subtree (currently only bspMcu).
platforms/stm32/bsp/bspMcu/startup/startup_stm32g474xx.s Startup/reset handler + vector table for STM32G474xx.
platforms/stm32/bsp/bspMcu/startup/startup_stm32f413xx.s Startup/reset handler + vector table for STM32F413xx.
platforms/stm32/bsp/bspMcu/src/reset/softwareSystemReset.cpp Adds software-triggered system reset wrapper with weak pre-reset hook.
platforms/stm32/bsp/bspMcu/module.spec Declares module metadata.
platforms/stm32/bsp/bspMcu/linker/STM32G474RExx_FLASH.ld Linker script for STM32G474RE flash/RAM layout.
platforms/stm32/bsp/bspMcu/linker/STM32F413ZHxx_FLASH.ld Linker script for STM32F413ZH flash/RAM layout.
platforms/stm32/bsp/bspMcu/include/reset/softwareSystemReset.h Public header for software reset API.
platforms/stm32/bsp/bspMcu/include/mcu/typedefs.h Adds NVIC convenience macro mappings.
platforms/stm32/bsp/bspMcu/include/mcu/mcu.h Single include point for chip headers + platform interrupt macros.
platforms/stm32/bsp/bspMcu/include/3rdparty/st/stm32g4/system_stm32g4xx.h Imports ST system header for G4 family.
platforms/stm32/bsp/bspMcu/include/3rdparty/st/stm32g4/stm32g4xx.h Imports ST device-family header for G4.
platforms/stm32/bsp/bspMcu/include/3rdparty/st/stm32f4/system_stm32f4xx.h Imports ST system header for F4 family.
platforms/stm32/bsp/bspMcu/include/3rdparty/st/stm32f4/stm32f4xx.h Imports ST device-family header for F4.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/m-profile/cmsis_gcc_m.h Imports CMSIS compiler support header (GCC, M-profile).
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/m-profile/cmsis_clang_m.h Imports CMSIS compiler support header (Clang, M-profile).
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/m-profile/armv7m_mpu.h Imports CMSIS MPU API for Armv7‑M.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/LICENSE Adds Apache-2.0 license text for CMSIS import.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/cmsis_version.h Imports CMSIS version header.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/cmsis_gcc.h Imports CMSIS GCC compiler abstraction header.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/cmsis_compiler.h Imports CMSIS compiler selection header.
platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/cmsis_clang.h Imports CMSIS Clang compiler abstraction header.
platforms/stm32/bsp/bspMcu/doc/index.rst Adds module documentation for the STM32 MCU foundation layer.
platforms/stm32/bsp/bspMcu/CMakeLists.txt Defines bspMcu library and includes/compile defs for STM32.
executables/referenceApp/platforms/nucleo_g474re/Options.cmake Adds referenceApp options for NUCLEO‑G474RE.
executables/referenceApp/platforms/nucleo_g474re/CMakeLists.txt Adds placeholder board CMakeLists.
CMakePresets.json Adds STM32 build/test presets (boards × RTOS).
CMakeLists.txt Adds STM32 platform detection for selecting platforms/stm32 and Rust target.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread CMakePresets.json Outdated
Comment thread platforms/stm32/bsp/bspMcu/startup/startup_stm32g474xx.s
Comment thread platforms/stm32/bsp/bspMcu/startup/startup_stm32f413xx.s
Comment thread platforms/stm32/bsp/bspMcu/startup/startup_stm32g474xx.s Outdated
Comment thread platforms/stm32/bsp/bspMcu/startup/startup_stm32f413xx.s Outdated
Comment thread platforms/stm32/bsp/bspMcu/linker/STM32F413ZHxx_FLASH.ld Outdated
Comment thread platforms/stm32/cmake/stm32g474re.cmake Outdated
Comment thread platforms/stm32/cmake/stm32f413zh.cmake Outdated
Comment thread platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/m-profile/armv7m_mpu.h Outdated
Comment thread NOTICE.md Outdated
Comment thread CMakePresets.json Outdated
Comment thread CMakePresets.json Outdated
@nhuvaoanh123

nhuvaoanh123 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor Author

Thank you for the review.

  • CMSIS duplication: moving to libs/3rdparty/cmsis/ as a separate prep PR, shared by s32k1xx and stm32. Both copies are CMSIS 6.1.0 — 6 of 9 files byte-identical, 3 differ only in Doxygen comment style. Impact is 6 files: one CMakeLists path change per platform, one #include path fix in s32k1xx mcu.h, one module.spec glob update, one NOTICE.md consolidation. Nothing outside platforms/ uses CMSIS-Core. Full impact analysis in the strategy doc.
  • F413ZH preset fails: removing all board presets from this PR. They'll ship in the PR that provides the full board directory.
  • G474RE FreeRTOS build fails: same — FreeRTOS preset moves to the PR that provides the port, config, and main.cpp.

Full restructured plan: docs/stm32-pr-strategy.md

We'll rebase the series to match and update the PRs.

@rolandreichweinbmw

rolandreichweinbmw commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

Are you still planning to provide the PR 0, and update the others, as documented there?

OTOH, you can also convert the PRs to "draft" for now, and in the beginning of collaboration in this project, first work on one of the smaller tasks under "issues".

@nhuvaoanh123

Copy link
Copy Markdown
Contributor Author

Yes, sticking with the plan. Starting with PR 0 (CMSIS move to libs/3rdparty/cmsis/). Will update the series once that lands.

@nhuvaoanh123

Copy link
Copy Markdown
Contributor Author

Hi @rolandreichweinbmw — PR 0 is now open as #445 (cmake-format CI cleared via 473d0713). On the earlier NOTICE.md ask: this branch already includes new entries for CMSIS at platforms/stm32/bsp/bspMcu/include/3rdparty/cmsis/LICENSE and ST STM32 Device Headers at .../st/LICENSE. Once #445 lands, the stack will be rebased to consume libs/3rdparty/cmsis/ and drop the duplicate stm32 CMSIS row.

Marking #414–422 as draft for now while #445 is in review, per your suggestion.

@rolandreichweinbmw

Copy link
Copy Markdown
Contributor

Now that #445 is merged, you can pick up this PR, resolve conflicts and remove the redundant CMSIS copy.

@nhuvaoanh123

Copy link
Copy Markdown
Contributor Author

Thanks, this is done now. I rebased the branch, resolved the conflict, removed the redundant STM32 CMSIS copy, and CI is green.

Comment thread docs/stm32-platform-overview.md Outdated
Comment thread docs/stm32-pr-strategy.md Outdated
Comment thread platforms/stm32/bsp/bspMcu/doc/index.rst Outdated
Comment thread platforms/stm32/bsp/bspMcu/doc/index.rst Outdated
Comment thread platforms/stm32/bsp/bspMcu/include/3rdparty/st/stm32f4/stm32f4xx.h
Comment thread platforms/stm32/bsp/bspMcu/include/mcu/typedefs.h Outdated
@nhuvaoanh123 nhuvaoanh123 force-pushed the stm32-pr-1 branch 2 times, most recently from e5ab109 to 71a2b34 Compare June 2, 2026 06:01
@nhuvaoanh123 nhuvaoanh123 changed the title feat(stm32): MCU foundation — CMSIS, device headers, startup, linker Add STM32 MCU foundation Jun 10, 2026
@nhuvaoanh123

Copy link
Copy Markdown
Contributor Author

Thank you for the patience with this PR. All review points should now be addressed: the ST device headers are RIM-controlled (cmsis_device_f4 v2.6.11, cmsis_device_g4 v1.2.6), the .riminfo question is answered in the thread above, the commit messages follow the guideline, and the PR-level documentation was moved out of the repository. The branch is rebased onto current main; the remaining CI failures are the posix/s32k jobs that currently also fail on main itself. The rest of the series is kept as drafts and will be refreshed one PR at a time.

At the moment, we are simply out of capacity to re-check this PR continuously, but we will do our best to keep reviewing and improving it one at a time. Thank you again for your helpful comments.

@rolandreichweinbmw rolandreichweinbmw force-pushed the stm32-pr-1 branch 2 times, most recently from 6d7b411 to e68743f Compare June 22, 2026 11:56
Import the STM32F4 and STM32G4 CMSIS device headers from
STMicroelectronics' dedicated RIM-tracked repositories. Keep only the
F413 and G474 headers needed by the STM32 MCU foundation and record
the unused upstream headers as RIM ignores.
Add the STM32 platform entry point, chip CMake files, bspMcu startup
code, a software reset wrapper, and the STM32 unit-test presets. The
platform reuses the shared CMSIS core from libs/3rdparty/cmsis
instead of carrying a local copy.
@rolandreichweinbmw rolandreichweinbmw merged commit b581e80 into eclipse-openbsw:main Jun 26, 2026
129 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants