cancel
Showing results for 
Search instead for 
Did you mean: 

Help Needed: Setting Up CLion for STM32 Development on macOS

lalalala
Associate II

Hi everyone,

 

I’m new to STM32 development and need some help configuring CLion for working with STM32 microcontrollers. I have installed STM32CubeMX (version 6.13.0) and am trying to generate a project for my STM32F411CEU6 microcontroller. However, I’m encountering an issue where the Eclipse launcher fails to work, and I can’t proceed further.

 

I’m using macOS Sequoia (version 15.2). Could anyone guide me through the process of setting up CLion on macOS to work with STM32?

 

Any advice, steps, or resources would be greatly appreciated!

 

Thanks in advance!
Screenshot 2025-01-09 at 20.18.45.pngScreenshot 2025-01-09 at 20.23.59.png

1 ACCEPTED SOLUTION

Accepted Solutions
lalalala
Associate II

By the way, if anyone finds it useful, I’m sharing my CLion setup for STM32 development on macOS (Apple Silicon)

To get started, you’ll need to install STM32CubeCLT, which will automatically set up the required toolchain in the /opt/ directory on your Mac.

Here are screenshots of my three configurations:

Build setup

lalalala_0-1740432414728.png

Flashing the STM32

lalalala_1-1740432429031.png

Debugging setup

lalalala_2-1740432688308.png

CMakeLists.txt

 

 

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.30)

# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER  arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# project settings
project(Greenhouse C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

#Uncomment for software floating point
#add_compile_options(-mfloat-abi=soft)

add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

# uncomment to mitigate c++17 absolute addresses warnings
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")

# Enable assembler files preprocessing
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
    message(STATUS "Maximum optimization for speed")
    add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    message(STATUS "Maximum optimization for speed, debug info included")
    add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
    message(STATUS "Maximum optimization for size")
    add_compile_options(-Os)
else ()
    message(STATUS "Minimal optimization, debug info included")
    add_compile_options(-Og -g)
endif ()

include_directories(Inc
        Drivers/CMSIS/Device/ST/STM32F4xx/Include
        Drivers/CMSIS/Include)

add_definitions(
        -DDEBUG
        -DSTM32F411xE
)

file(GLOB_RECURSE SOURCES
        "Startup/*.*"
        "Src/*.*"
        "Drivers/*.*"
)

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F411CEUX_FLASH.ld)

add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})

add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")

 

 

 

View solution in original post

11 REPLIES 11
Pavel A.
Evangelist III

I’m new to STM32 development and need some help configuring CLion for working with STM32

Looking for problems bravely... Can you just get a decent and affordable Windows laptop?

 

Are you serious right now? What’s the point of buying a Windows laptop just for a microcontroller? I can already flash STM32 perfectly fine using STM32 command-line utilities on macOS—everything works. The only thing I want is to set up CLion on macOS for convenience when working with this microcontroller. Why would I switch to Windows, which is uncomfortable for me, when I’ve been using macOS my entire life? Where’s the logic in that? :thinking_face:

I am dead serious. I'm from the Windows camp, using it all my life. The logic is that time is very precious. If a tool hampers your productivity, don't let it stop you. Get a better tool and be happy. Windows PCs are the best for embedded kind of projects. Of course if you are so comfortable with Mac and CLion - then good luck. 

 

Dazed_N_Confused
Associate II

PlatformIO (plugin) is the quickest and simplest by a long shot.

The issue is that the PlatformIO platform currently supports only two STM32 Boards in Clion that can be created using this plugin, and unfortunately, my specific microprocessor STM32F411CEU6 is not among them.

Platformio is very flexible and is not specific to Clion.

https://docs.platformio.org/en/latest/boards/ststm32/genericSTM32F411CE.html

Who would use a Windows/Intel laptop when he/she can use a Mac with Apple Silicon which leaves any windows system kicking in the dust:

Scherm­afbeelding 2025-02-24 om 08.46.58.png

 

 

 

 

 

 

 

 

 

CLion serves me very well on my mac with STM32 development.

Except of compatibility problems that burn time and nerve cells, and... " Apple Silicon which leaves any windows system kicking in the dust" is simply not true. Decent Intel and AMD platforms are beasts.

 

Dude, I’m with you 100%! It’s like reaching your destination in a beat-up old bus or a Tesla – both will get you there, but the experience is totally different :D

 

By the way, would you mind sharing some screenshots of your toolchain and debugger setup in CLion for STM32? That would be super helpful! :raising_hands: