一、下载程序和工具链1、安装Clion 2025.2下载 CLion用于 C/C 开发的智能跨平台 IDE2、安装STM32CubeCLT\Cubemxst-stm32cubeclt_1.19.0_25876_20250729_1159_x86_64.exeCLT:https://www.st.com.cn/cloudfront/publish/STM32CubeCLT-Win/1.19.0/en/st-stm32cubeclt_1.19.0_25876_20250729_1159_x86_64.exe.zip?Expires1760498973SignatureIbIMgITF41FZROfo4-aEnXzG81BMEmrjAVJn-IJg0q5GpKtTEvFrTw0WMGnB28aUbbUjm55QPaONwLZXKKnqFffq2lNjyrEIbg2s36mA77Ip2SjBOMkqpgTHAtgQ3~2Y7aphUQLw0~HAflTHHeOJjqV8iVBSEg8p86Eb-NDAS6a2Wp8K4t5q~ttvZmjCH4IIjDSyPyIQV54tLKL~-ZSJswnc2e~ro1u~YJh1uOufiwkDDHGdi1AH0tBlJ4eJbNJAbj461732E1rWAs0GrIc8m-y7D9aqIpX2foqolWvphhKrEUxttSXWH9mSsIGRIIYTxcahgs8mvSevhQq6DqVSfw__Key-Pair-IdK27828FUHOZJS8MX:STM32CubeMX | Software - 意法半导体STMicroelectronics3、安装STM32CubeProgrammer和J-Flash等Prog:非必要仅后期内存对照使用STM32CubeProg | Software - STMicroelectronics烧录工具ST-LINKJ-FLASH(必选其一涉及st-linkj-link烧录)4、下载gcc-arm-none-eabi最新的gcc-arm-none-eabi-10.3-2021.10https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.zip5、下载mingWx86_64-15.2.0-release-win32-seh-ucrt-rt_v13-rev0.7z选择win32 ucrt版本即可https://release-assets.githubusercontent.com/github-production-release-asset/446033510/49d8aedc-81fb-42c5-9fdb-f71c93688adb?sprsv2018-11-09srbsprhttpsse2025-10-15T04%3A45%3A30Zrscdattachment%3Bfilename%3Dx86_64-15.2.0-release-win32-seh-ucrt-rt_v13-rev0.7zrsctapplication%2Foctet-streamskoid96c2d410-5711-43a1-aedd-ab1947aa7ab0sktid398a6654-997b-47e9-b12b-9515b896b4deskt2025-10-15T03%3A44%3A50Zske2025-10-15T04%3A45%3A30Zsksbskv2018-11-09sigaKP672x4KNv2ftvinsnWZhX66WjRMPRWOiV57x1iCFU%3DjwteyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MDUwMTk3MSwibmJmIjoxNzYwNTAwMTcxLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.IdhuPss-hWda-2NqTB5-2BnpW_U1YfRigqXuogCacq8response-content-dispositionattachment%3B%20filename%3Dx86_64-15.2.0-release-win32-seh-ucrt-rt_v13-rev0.7zresponse-content-typeapplication%2Foctet-stream6、下载OpenOCDhttps://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.zip7、下载svd如果没有下载stm32CubeProgrammer,可以使用下面的svd文件若下载只需要在对应的根目录下打开svd文件夹官网的资源下载在对应芯片型号的设计资源里面二、系统环境配置在没有空格和中文路径的文件夹下解压mingW和OpenOCD、gcc-arm-none-eabi到文件夹下其他exe一路next安装记录文件路径,如1、路径a ..\STM32CubeCLT_1.19.0b ..\STM32CubeProgrammer\binc ..\gcc-arm-none-eabi-10.3-2021.10\bind ..\OpenOCD-20250710-0.12.0\bine ..\MinGW\binf ..\svd(clion破解问题自己解决)2、环境变量系统环境变量添加如上 c、d、e路径gcc-arm-none-eabimingWOpenOCD这里不连续是因为以前有软件使用了mingW三、软件环境配置Clion设置内打开1、嵌入式开发2、工具链-1后称为外部工具链3、工具链-2后称为CLT工具链4、调试服务器a、打开调试服务器旧版此项默认打开视Clion版本决定b、配置调试服务器J-LINKST-LINK5、J-FLASH J-LINK按这个去自己选配置好之后请应用-确认,每一次创建新工程都需要执行此部分暂时发现是这样子不能通用泛型只是提供了更多参数辅助如果需要测试能否使用debug请转换为泛型,然后内部可以提供测试6、RTOS集成7、CMake配置8、AI代码上下文生成(可选不需要补齐可以使用clion本身的补齐)API付费插件内下载cline插件内配置您的API-key大概一次从0开始的工程一次在0.25元左右继续对话或者已经有沟通基础的价格会明显降低申请key和模型类型付费规则请查询 DeepSeek 开放平台四、项目工程创建A.HAL库工程创建cubemx考虑到后文需要描述ld和分片的内存管理所以本文选择创建一个STM32H743VI的项目作为示例1、cubemx创建工程有需要可以在Code Generator中选择Generate peripheral initialization as a pair of .c/h file per peripheral2、关于工具链的解释使用Clion编译需要一个工具链因为网上不少文章均在本节1的最后一步当中选择了STM32CubeIDE,甚至在早期这个地方出现了一个叫SW4STM32的项目存在部分教程混着用的情况这里给出两个方法创建之后的项目文件截图下图为cmake项目下图为cubeide项目可以看到第一个文件夹内有多一个cmake文件夹和cmakelist.txt、startup.s文件而cubeide多了一个 STM32H743VITX_RAM.ld 文件首先需要说明的一点是这两个行为都可以成功创建工程但是对于后期使用和维护是存在部分差异的。如果使用的stm32cubemx的版本高于6.12.0是可以使用Cmake生成的这个cmakelist能直接使用。如果使用的版本是6.15.0及以上的目前了解到的情况是无法通过cubemx生成的cmakelist获得正确的工具链等等情况,想要了解的可以参考后面的cmakelist修改(参考第七章12stm32cubemx 6.15版本造成的cmake工具链损坏问题)。本文建议使用cubeide进行项目创建因为使用Clion生成的cmakelist.txt比较简单避免出现需要手动修改CMakelist的行为.3、在clion内打开项目并配置项目右键项目文件夹选择使用Open Folder as Clion Project信任项目工程选择“是”此处不贴图了面板配置文件现在先跳过得到的界面现在就已经可以编译得到结果了上图原生-编辑调试服务器应用确定烧录办法参照本文第三节。B.标准库工程创建1、正点原子模板Ⅰ、模板下载F4https://pan.baidu.com/s/1kZdtf56EWheIE86tvslovg提取码uonqF1https://pan.baidu.com/s/1rbc0T0rlkFuJd7rD-KrS7g提取码dka8Ⅱ、工程创建本节将会以STM32F103VG为例创建一个标准库工程请参照HAL库工程创建上文HAL库工程创建创建一个Cubeide工程并使用CLion进行一次配置和编译配置好CMake(避免后面改了之后不能正确生成cmakelist的问题贴一个自然生成后改了的cmakelist参考#此文件从模板自动生成! 请勿更改! set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_VERSION 1) cmake_minimum_required(VERSION 4.0) # 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(F1 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-abihard -mfpufpv4-sp-d16) #add_link_options(-mfloat-abihard -mfpufpv4-sp-d16) #Uncomment for software floating point #add_compile_options(-mfloat-abisoft) add_compile_options(-mcpucortex-m3 -mthumb -mthumb-interwork) add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length0) # uncomment to mitigate c17 absolute addresses warnings #set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wno-register) # Enable assembler files preprocessing add_compile_options($$COMPILE_LANGUAGE:ASM:-x$SEMICOLONassembler-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(CORE STM32F10x_FWLib/inc SYSTEM/delay SYSTEM/sys SYSTEM/usart USER) add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xG) file(GLOB_RECURSE SOURCES CORE/*.* STM32F10x_FWLib/src/*.* SYSTEM/delay/*.* SYSTEM/sys/*.* SYSTEM/usart/*.* USER/*.* ) set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F103VGTX_FLASH.ld) add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map) add_link_options(-mcpucortex-m3 -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})只要能看到这个打开项目向导选择好编译链就行了项目名可以自己自定义退出Clion,来到文件资源管理器删除Core和Drivers然后把正点原子的《实验0-1 Template工程模板-新建工程章节使用》这个文件除了keilkill和readme全部弄过来Core文件夹内的启动文件更换为GCC能够使用的版本搞不明白的可以去回收站把刚刚删掉的cubemx生成的启动文件拿回来替换2026 04 30Kyin:感谢大佬指点此处不能使用的原因是首先ac5和gcc的启动文件不能共用是已知的我原来以为标准库里面并没有提供gcc的启动文件一次偶然的沟通中发现gd提供的启动文件有区分gcc版本然后就重新看了一下stm32提供的文件发现启动文件基本上是同名的但是不一定是如_md _hd这样也有可能是fxx在cmsis里面有提供到gcc的版本但是文件名和temple里面是一致的会造成误会也没有明确注明是gcc如果不能判断的话仍可使用mx生成的版本。OBJ文件夹可以删除STM32F10x_FWLib内删除掉当前芯片没有或不需要的库Sys文件夹不动USER删掉KEIL部分重新使用Clion打开项目core_cm3.c按如下要求修改两处r 改为 rSys.c注释掉如下在Cmakelist内按文件顺序添加源文件和头文件路径在stm32f10x.h顶部加上芯片定义#define STM32F10X_HD #define USE_STDPREIPH_DRIVER好了可以编译了2、标准模板Ⅰ、模板下载STM32标准外设软件库 - 意法半导体STMicroelectronicsⅡ、工程创建大致方向参考上面正点原子的办法工程目录和文件按如下配置(命名习惯按我自己的弄得)main文件夹内的文件core_cm3文件和STM32F10X_HD宏同样参照上面原子的那个启动文件也按找上文的GCC办法进行修改C.烧录和调试配置Ⅰ、使用OpenOCD的烧录debug推荐回到主界面点击运行配置部分新增一个OpenOCD下载并运行改名可以不改重新选择目标打开辅助随便选一个面板文件复制到项目并使用复制到项目根目录。按自己的想法改名内部FLASH启动参考编辑如下(请按实际情况修改驱动名字器件类型Flash大小)# choose st-link/j-link/dap-link etc. adapter driver j-link transport select swd # 0x2000000 2048K Flash Size set FLASH_SIZE 0x2000000 source [find target/stm32h7x.cfg] # download speed 10MHz adapter speed 10000Ⅱ、烧录器提供的GDB仅debug回到主界面点击控制栏 -运行 -新建嵌入式配置更改为你的配置名然后下一步选择器件和速度回到主界面来看可以发现选项并没有运行选项Ⅲ、批量烧录文件路径在项目文件夹cmake-build-编译类型-工具链名下面Ⅳ、串口重定向问题资源没能放上来网上冲浪自己看D.头文件和源文件配置模板是cubeide的办法但是集成了cmake的单个源添加五、工程移植A.MDKKeilB.IAR略六、调试部分1、准备准备好一个工程点击debug按钮进入debug此工程实现在主循环递增并在usart.c文件内根据递增数除以11后1编译后debug2、svd在外设内加载svd根据实际需要选择外设得到如上界面则为加载成功3、变量监控在线程和变量中可以看到不同文件在添加了断点之后就有变量监控了可以在代码内直接点击变量数值进行修改4、内存监控内存部分可以根据内存地址进行监控类似stm32prog七、容易出错的点1、无法使用内存监控和寄存器控制使用stm32cubeprogrammer进行测试能读内存和看外设就是OK的stm32cubeprogrammer如显示连接不上数据库尝试打开j-flash正确连接一次芯片后保存配置重启programmer对非STM32系列兼容的国产兼容性根据版本兼容性非常差可以使用st芯片测试如雅特力 GD等测试就不行2、SVD部分无法监视确认不是本节第一点的问题检查svd文件本身是否存在问题建议去官网下一个替换点击这个隐藏就是删除的意思然后重新加svd3、STM32CubeMX直接生成的工程编译出来显示.ld错误解决办法来自STM32CubeMX生成.ld文件出错 - 哔哩哔哩错误根因STM32CubeMX 版本6.12.x版本引入的问题解决办法A治标解决办法B治本将当前CubeMX版本升级到最新或者回退到非6.12.x版本4、warning: A handler for the OS ABI Windows is not built into this configuration烧录部分出现这个警告是正常的但是没有跳出烧录成功的情况表示你的烧录硬件连线出现问题可以尝试使用烧录器的对应独立烧录软件测试。debug部分出现正常警告无影响。5、Clion显示编译器出错message(FATAL_ERROR The C compiler\n \${CMAKE_CXX_COMPILER}\\n is not able to compile a simple test program.\nIt fails with the following output:\n ${_output}\n\n CMake will not be able to correctly generate this project.)此项主要问题来源于在cubemx当中勾选了cmake的情况下可能出现的问题。6.15版本可以参考下面12点的情况把这段放在Cmake标准下面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)6、Startup.s文件出错此项主要问题多见于标准库工程因为GCC要求不一样可以创建一个cubemx空工程复制.s文件过来使用F1差异类似如下期待文件实际的错误文件其他型号可以参考Cubemx创建工程的时候使用的是什么类型的启动文件直接复制过来也是可以的。7、已经引用了头文件仍然出现未定义行为Cmakelist.txt的源文件请按照左侧文件结构顺序添加8、Core_cm3.h等类似报错core_cm3.c按要求修改两处r 改为 r修改参考标准库工程创建部分正点原子模板工程创建9、stm32f10x.h报错需要选择目标Please select first the target STM32F10x device used in your application (in stm32f10x.h file)直接在顶上加上对应的define#define STM32F10X_HD //256KB≤FLASH≤512KB #define USE_STDPERIPH_DRIVER10、出现cpsid i /wfe等报错类似Error: selected processor does not support cpsid i in ARM modeError: selected processor does not support wfe in ARM modeError: selected processor does not support dsb 0xF in ARM mode添加如下代码到cmakelistm核是多少改成多少不要照搬m3add_compile_options(-mcpucortex-m3 -mthumb -mthumb-interwork) add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length0)11、工具链报错“--major-image-version”/arm-none-eabi/bin/ld.exe: unrecognized option --major-image-version多见于cubemx直接生成cmake工程将如下代码添加到cmakelist.txt的最上面set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR arm)12、stm32cubemx 6.15版本造成的cmake工具链损坏问题参考来自意法自己的回答已解决STM32CubeMX 6.15 生成的 CMake 项目构建... - STMicroelectronics 社区将这串代码加入编译工具链-DCMAKE_TOOLCHAIN_FILE./cmake/gcc-arm-none-eabi.cmake13、外设库报错frist define xxx如果是Cubemx创建的cmake工程,在源文件路径当中剔除这个文件因为cubemx的库包含了此项是AI帮我编译并解决的