CLion的cmake环境搭配
1. 使用步骤(只搭配环境,不进行实际的使用)
1.1 第一步 STM32CubeMX生成cmake文件

1.2 第二步 右键使用clion打开文件

1.3 第三步 使用debug-debug预设


1.4 第四步 安装Arm GCC 和OpenOCD(注意解压后不要修改文件位置,不然会导致环境紊乱)
DevEnv.zip

xpack-openocd-0.12.0-7-win32-x64.zip
1.5 第五步 OpenOCD添加至环境变量


双击Path可以打开新建路径



1.6 第六步 将clion改为中文


2. clion的嵌入式开发配置
2.1 第一步 设置->构建,执行·部署->嵌入式开发


点击…选中stm32CLI

2.2 第二步 编译链的改变
2.2.1 选择编辑cmake文件

2.2.2 选择编译链

2.2.3 添加编译链

2.2.3.1 cmake的选择(选择STM32CubeCLT的cmake.exe)

2.2.3.2 Ninja.exe的选择(选择STM32CubeCLT的Ninja.exe)

2.2.3.3 C编译器的选择(选择STM32CubeCLT的arm-none-eabi-gcc.exe)

2.2.3.4 C++编译器的选择(选择STM32CubeCLT的arm-none-eabi-c++.exe)

2.2.3.5 工具链修改

3. OpenOCD的使用
3.1 选择运行配置

3.2 找到openocd

3.3 页面配置

3.4 选择配置文件(以STM32F205RGT6为例


4. CLion中使用daplink下载,stlink下载,jlink下载
4.1 daplink下载
4.1.1 使用daplink.cfg下载
daplink.cfg
4.1.2 daplink.cfg在不同芯片的修改

芯片flash大小的查看
在STM32cubeMX此页面中查看


先编译再运行 直到右下角出现openocd 已下载固件

4.2 stlink下载
对于新版 OpenOCD 可能不支持hla_swd,transport select swd 改用通用 SWD,不依赖 HLA(两份驱动文件,一份是通用性不依赖 HLA,一份是依赖 HLA)
stlink.cfg
stlink.cfg

4.3 jlink下载



5. CMakelist 文件的修改
5.1.1 添加每一个文件路径
5.1.1.1 方法一 为每一个.C或 .C++文件添加路径(好处是清晰分明)
以我的代码架构作为参考
├── ADC
│ ├── drv_adc.cpp
│ └── drv_adc.h
├── CMakeLists.txt
├── CMakePresets.json
├── Core
│ ├── Inc
│ └── Src
├── Drivers
│ ├── CMSIS
│ └── STM32F4xx_HAL_Driver
├── Middlewares
│ └── Third_Party
├── SEGGER
│ ├── Config
│ └── RTT
├── STM32F405XX_FLASH.ld
├── bsp
│ ├── log
│ └── usart
├── build
│ └── Debug
├── cmake
│ ├── gcc-arm-none-eabi.cmake
│ ├── starm-clang.cmake
│ └── stm32cubemx
├── component
│ ├── comp_ahrs.c
│ ├── comp_ahrs.h
│ ├── comp_cmd.c
│ ├── comp_cmd.h
│ ├── comp_game.h
│ ├── comp_type.h
│ ├── comp_utils.c
│ └── comp_utils.h
├── modules
│ └── dr16
├── one.ioc
├── startup_stm32f405xx.s
├── task
│ └── dr16
└── tool
├── convert
└── process

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
Add user sources here
task/dr16/dr16_task.c
bsp/log/bsp_log.c
component/comp_utils.c
component/comp_cmd.c
component/comp_ahrs.c
bsp/usart/bsp_uart.c
modules/dr16/dev_dr16.c
SEGGER/RTT/SEGGER_RTT.c
SEGGER/RTT/SEGGER_RTT_printf.c
SEGGER/RTT/SEGGER_RTT_ASM_ARMv7M.s
tool/convert/convert.c
tool/process/process.h
ADC/drv_adc.cpp
)
Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined include paths
task/dr16
SEGGER
SEGGER/Config
SEGGER/RTT
component
tool
tool/convert
tool/process
bsp
bsp/usart
bsp/log
modules
modules/dr16
ADC
)
5.1.1.2 直接添加文件路径(好处是无需为此文件路径下的每一个代码添加.c或.cpp文件)

# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined library search paths
)
set(USER_CODE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/task"
"${CMAKE_CURRENT_SOURCE_DIR}/component"
"${CMAKE_CURRENT_SOURCE_DIR}/bsp"
"${CMAKE_CURRENT_SOURCE_DIR}/modules"
"${CMAKE_CURRENT_SOURCE_DIR}/tool"
"${CMAKE_CURRENT_SOURCE_DIR}/SEGGER"
"${CMAKE_CURRENT_SOURCE_DIR}/ADC"
)
set(USER_SOURCES)
set(USER_HEADERS)
foreach(USER_CODE_DIR IN LISTS USER_CODE_DIRS)
file(GLOB_RECURSE USER_DIR_SOURCES CONFIGURE_DEPENDS
"${USER_CODE_DIR}/.c"
"${USER_CODE_DIR}/.cpp"
"${USER_CODE_DIR}/.s"
"${USER_CODE_DIR}/.S"
)
file(GLOB_RECURSE USER_DIR_HEADERS CONFIGURE_DEPENDS
"${USER_CODE_DIR}/.h"
"${USER_CODE_DIR}/.hpp"
)
list(APPEND USER_SOURCES ${USER_DIR_SOURCES})
list(APPEND USER_HEADERS ${USER_DIR_HEADERS})
endforeach()
list(REMOVE_DUPLICATES USER_SOURCES)
list(REMOVE_DUPLICATES USER_HEADERS)
set(USER_INCLUDE_DIRS ${USER_CODE_DIRS})
foreach(USER_HEADER IN LISTS USER_HEADERS)
get_filename_component(USER_HEADER_DIR "${USER_HEADER}" DIRECTORY)
list(APPEND USER_INCLUDE_DIRS "${USER_HEADER_DIR}")
endforeach()
list(REMOVE_DUPLICATES USER_INCLUDE_DIRS)
Add sources to executable. Headers are included for IDE visibility.
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
${USER_SOURCES}
${USER_HEADERS}
)
Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${USER_INCLUDE_DIRS}
)
5.1.2 添加printf的float支持

# Remove wrong libob.a library dependency when using cpp files
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob)
Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}
stm32cubemx
Add user defined libraries
)
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
Add user defined link options here
LINKER:-u,_printf_float
)
5.1.3 添加C++支持(如果代码使用了C++)

# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# Enable CMake support for ASM, C and C++ languages
enable_language(C CXX ASM)

评论(1)