maxgerhardt / pio-stm32h7-stm32cube-freertos

12 stars 2 forks source link

PIO + STM32H7 STM32Cube FreeRTOS demo

Description

Shows how a auto-generated STM32CubeMX project can be converted to be compiled with PlatformIO

STM32CubeMX configuration

  1. Selected the board NUCLEO-H723ZG, initialize all peripherals in default mode
  2. Activate Middleware -> FreeRTOS -> CMSIS_V2
  3. Change SYS -> Timebase Source to "TIM2" (recommended since FreeRTOS uses SysTick)
  4. Generate code for STM32CubeIDE, folder structure "advanced"

PlatformIO conversion

  1. Create blank PlatformIO project for NUCLEO-H723ZG
  2. Copy Core\Inc\* from STM32Cube project to include\*
  3. Copy Core\Src\* from STM32Cube project to src\*
  4. Copy Middlewares\Third_Party\FreeRTOS folder into lib
  5. Copy STM32H723ZGTX_FLASH.ld to the root of the PIO project
  6. Adapt platformio.ini to the following
[env:nucleo_h723zg]
platform = ststm32
board = nucleo_h723zg
framework = stm32cube
; select linker file generated by CubeMX
board_build.ldscript = STM32H723ZGTX_FLASH.ld
; make build system use our HAL config file
board_build.stm32cube.custom_config_header = yes
; force inclusion of lib/FreeRTOS
lib_deps = FreeRTOS
; needed compiler flags to 
; correctly build the port assembly files
; and add freertos subfolders to include path
build_flags =
  -mfpu=fpv4-sp-d16
  -mfloat-abi=softfp
  -Ilib/FreeRTOS/include
  -Ilib/FreeRTOS/CMSIS_RTOS_V2
  -Ilib/FreeRTOS/portable/GCC/ARM_CM4F
  -Iinclude
; link FreeRTOS as objectf files, not as
; archives. otherwise weak ISR functions
; don't get linked properly!
lib_archive = no
; fix for RAM size / initial SP.
; see https://community.platformio.org/t/arm-versus-thumb/23540/
; actually **not** needed because we have selected a fixed linkerfile!!
;board_upload.maximum_ram_size = 131072

Note: