当前位置: 首页 > news >正文

Clion+deepseek 开发stm32 HAL+标准库

一、下载程序和工具链

1、安装Clion 2025.2

下载 CLion:用于 C/C++ 开发的智能跨平台 IDE

2、安装STM32CubeCLT\Cubemx

st-stm32cubeclt_1.19.0_25876_20250729_1159_x86_64.exe)
CLT:
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?Expires=1760498973&Signature=IbIMgITF41FZROfo4-aEnXzG81BMEmrjAVJn-IJg0q5GpKtTEvFrTw0WMGnB28aUbbUjm55QPaONwLZXKKnqFffq2lNjyrEIbg2s36mA77Ip2SjBOMkqpgTHAtgQ3~2Y7aphUQLw0~HAflTHHeOJjqV8iVBSEg8p86Eb-NDAS6a2Wp8K4t5q~ttvZmjCH4IIjDSyPyIQV54tLKL~-ZSJswnc2e~ro1u~YJh1uOufiwkDDHGdi1AH0tBlJ4eJbNJAbj461732E1rWAs0GrIc8m-y7D9aqIpX2foqolWvphhKrEUxttSXWH9mSsIGRIIYTxcahgs8mvSevhQq6DqVSfw__&Key-Pair-Id=K27828FUHOZJS8
MX:
STM32CubeMX | Software - 意法半导体STMicroelectronics

3、安装STM32CubeProgrammer和J-Flash等

Prog:(非必要,仅后期内存对照使用)
STM32CubeProg | Software - STMicroelectronics
烧录工具:(ST-LINK&J-FLASH)
(必选其一,涉及st-link&j-link烧录)

4、下载gcc-arm-none-eabi

最新的gcc-arm-none-eabi-10.3-2021.10
https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.zip

5、下载mingW

x86_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?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-10-15T04%3A45%3A30Z&rscd=attachment%3B+filename%3Dx86_64-15.2.0-release-win32-seh-ucrt-rt_v13-rev0.7z&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-10-15T03%3A44%3A50Z&ske=2025-10-15T04%3A45%3A30Z&sks=b&skv=2018-11-09&sig=aKP672x4KNv2ftvinsnWZhX66WjRMPRWOiV57x1iCFU%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MDUwMTk3MSwibmJmIjoxNzYwNTAwMTcxLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.IdhuPss-hWda-2NqTB5-2BnpW_U1YfRigqXuogCacq8&response-content-disposition=attachment%3B%20filename%3Dx86_64-15.2.0-release-win32-seh-ucrt-rt_v13-rev0.7z&response-content-type=application%2Foctet-stream

6、下载OpenOCD

https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.zip

7、下载svd

如果没有下载stm32CubeProgrammer,可以使用下面的svd文件,若下载,只需要在对应的根目录下打开svd文件夹,
官网的资源下载在对应芯片型号的设计资源里面

二、系统环境配置

在没有空格和中文路径的文件夹下,解压mingW和OpenOCD、gcc-arm-none-eabi到文件夹下
其他exe一路next安装,记录文件路径,如

1、路径

a ..\STM32CubeCLT_1.19.0
b ..\STM32CubeProgrammer\bin
c ..\gcc-arm-none-eabi-10.3-2021.10\bin
d ..\OpenOCD-20250710-0.12.0\bin
e ..\MinGW\bin
f ..\svd
(clion破解问题自己解决)

2、环境变量

系统环境变量添加如上 c、d、e路径(gcc-arm-none-eabi,mingW,OpenOCD)
这里不连续是因为以前有软件使用了mingW

三、软件环境配置

Clion设置内打开

1、嵌入式开发

2、工具链-1(后称为外部工具链)

3、工具链-2(后称为CLT工具链)

4、调试服务器

a、打开调试服务器(旧版此项默认打开,视Clion版本决定)
b、配置调试服务器
J-LINK
ST-LINK

5、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 peripheral

2、关于工具链的解释

使用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修改(参考第七章:12:stm32cubemx 6.15版本造成的cmake工具链损坏问题)。
本文建议使用cubeide进行项目创建,因为使用Clion生成的cmakelist.txt比较简单,避免出现需要手动修改CMakelist的行为.

3、在clion内打开项目并配置项目

右键项目文件夹,选择使用Open Folder as Clion Project
(信任项目工程选择“是”,此处不贴图了)
面板配置文件,现在先跳过
得到的界面现在就已经可以编译得到结果了
上图,原生->编辑调试服务器,应用,确定
烧录办法参照本文第三节。

B.标准库工程创建

1、正点原子模板

Ⅰ、模板下载
F4
https://pan.baidu.com/s/1kZdtf56EWheIE86tvslovg提取码:uonq
F1
https://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-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-m3 -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(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(-mcpu=cortex-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 30@Kyin:感谢大佬指点,此处不能使用的原因是,首先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 改为 =&r
Sys.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.MDK(Keil)

B.IAR(略)

六、调试部分

1、准备

准备好一个工程,点击debug按钮进入debug
此工程实现在主循环递增,并在usart.c文件内根据递增数除以11后+1,编译后debug

2、svd

在外设内加载svd,根据实际需要选择外设
得到如上界面则为加载成功

3、变量监控

在线程和变量中可以看到,不同文件在添加了断点之后就有变量监控了
可以在代码内直接点击变量数值进行修改

4、内存监控

内存部分,可以根据内存地址进行监控,类似stm32prog

七、容易出错的点

1、无法使用内存监控和寄存器控制

  • 使用stm32cubeprogrammer进行测试
  • 能读内存和看外设就是OK的
  • stm32cubeprogrammer如显示连接不上数据库,尝试打开j-flash正确连接一次芯片后,保存配置,重启programmer
  • 对非STM32系列兼容的国产兼容性根据版本兼容性非常差,可以使用st芯片测试(如雅特力 GD等测试就不行)

2、SVD部分无法监视

  • 确认不是本节第一点的问题
  • 检查svd文件本身是否存在问题,建议去官网下一个替换
  • 点击这个隐藏,就是删除的意思,然后重新加svd

3、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_DRIVER

10、出现cpsid i /wfe等报错

类似
Error: selected processor does not support `cpsid i' in ARM mode
Error: selected processor does not support `wfe' in ARM mode
Error: selected processor does not support `dsb 0xF' in ARM mode
添加如下代码到cmakelist(m核是多少改成多少,不要照搬m3)
add_compile_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork) add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

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.cmake

13、外设库报错frist define xxx

如果是Cubemx创建的cmake工程,在源文件路径当中剔除这个文件,因为cubemx的库包含了(此项是AI帮我编译并解决的)
http://www.jsqmd.com/news/729432/

相关文章:

  • 终极指南:如何用autojump与CLion WSL集成打造Windows子系统C++开发导航神器
  • 2026成都温室大棚选型指南:热镀锌大棚管/育苗大棚/自动化温室大棚/蔬菜大棚搭建/连栋温室大棚/四川农业大棚/选择指南 - 优质品牌商家
  • Kitematic与AWS ECR集成:云容器仓库管理终极指南
  • 别再只用BorderRadius了!WPF中Clip属性的5个实战用法,让你的UI设计更出彩
  • Trino数据分区策略终极指南:时间、哈希与范围分区优化技巧
  • 51单片机汇编实验:基于AT89C51微控制器与DAC0832的波形发生器
  • Websoft9备份与恢复:使用Duplicati实现数据保护的完整方案
  • E2B Code Interpreter快速入门:10分钟学会AI沙盒代码执行
  • 【技术深度】SGLang LLM服务框架远程代码执行漏洞(CVE-2026-5760):Jinja2 SSTI引爆AI基础设施
  • vim-airline测试框架终极指南:10个实用技巧提升插件质量
  • 量子计算误差缓解与基准测试技术解析
  • Windows电脑能否真正告别安卓模拟器?APK Installer带来的革命性突破
  • SVE2向量减法指令SUBP原理与应用解析
  • 掌握inih高级技巧:轻松处理多行配置、UTF-8 BOM与自定义解析器
  • 智能体辅助测试
  • 如何实现qiankun微应用主题定制:CSS变量与动态切换完整指南
  • 2026Q2导视系统广告技术解析与专业厂家筛选推荐 - 优质品牌商家
  • 代码质量与工具链:backend-best-practices的静态分析与格式化
  • 多模态AI量化交易实战:视觉与文本信号融合策略解析
  • “十全十美”指标实战复盘:我是如何用它捕捉到近期XX板块主升浪的?
  • Rust OpenGL上下文创建库glutin:跨平台图形编程的终极指南
  • 从飞剪到旋切:用CODESYS电子凸轮实现一个简易包装机同步案例
  • 阿里云ecs云服务器linux安装redis
  • 独立开发者如何利用 Taotoken 按需调用模型并控制成本
  • 香蕉标准版还是差点意思
  • 如何用tasuku提升你的Node.js脚本开发效率:10个实用技巧
  • LiuJuan20260223Zimage一文详解:Z-Image基座模型特性、Lora适配原理与部署注意事项
  • Tinyhttpd代码审查终极指南:10个关键网络安全与资源管理要点
  • 向量图形生成技术:从文本到SVG的AI创作
  • ARM SVE2向量指令集:TBXQ与TRN1/TRN2优化实战