Clion实现Stm32标准库开发
2025-10-22 来源:bilibili
在网上搜索Clion开发Stm32,大部分教程都是关于hal库的,标准库的移植教程比较少,而我对标准库情有独钟,打出感情来了,只用Clion的hal库开发总感觉少了点什么。对于Clion标准库移植我只能说,我可以不用,但是我不能没有。
首先先对比一下标准库和hal库的区别。
标准库和hal库性能对比
标准库:偏向底层,操作繁琐,运行效率较hal库高,占用空间小,官方不更新了
hal库:更加抽象,操作简单,运行效率较标准库低,占用空间大,持续更新
不过对于stm32来说,如此高性能的芯片运行hal库基本不受性能影响,拿stm32f103c8t6来说,20KB的SRAM空间和64KB的Flash空间以及72mhz高主频,用hal库做一些中小型任务完全无压力。这是网上的一张Stm32标准库,hal库,ll库和寄存器运行效率对比图:

各种库性能对比图
下面进入正题,本文包括两个部分,Clion中开发Stm32的环境搭建和标准库移植。
环境搭建:
首先先把环境搭建的材料发一发,链接如下:
Clion2020破解版:
链接:https://pan.baidu.com/s/1HKE8WZEB5zeC8yuGSdraIg
提取码:ALYA
环境搭建材料:
gcc-arm-none-eabi 交叉编译器
MinGW CLion配置工具链的环境
STM32CubeMX STM32自动化配置和代码生成工具
链接:https://pan.baidu.com/s/1POex4nDKzCnWCc2ZA1g8zg
提取码:ALYA
关于安装,十分简单,下一步操作按到底即可。其中gcc-arm和MinGW安装完毕后需要配置一下环境变量,配置完毕后重启电脑,然后打开CMD输入arm-none-eabi-gcc -v和gcc -v验证是否安装成功,有返回信息就安装成功了。
Win10配置环境变量:打开此电脑->系统属性->高级系统设置->环境变量

此电脑->系统属性

高级系统设置

环境变量

在系统变量栏找到Path然后点编辑

注意:Stm32CubeMX需要安装JDK,直接去官网下载安装就行了
至此,所有材料安装完毕。
Clion配置:
打开File->Settings->Build,Execution,Devlopment->ToolChains,输入Mingw的路径,Clion会自动识别,识别慢的话直接输入即可。

Clion配置
创建Stm32CubeMX工程
File->New Project->Stm32CubeMX,点击创建,创建完成后点击Open with Stm32CubeMX对芯片进行配置。

点Open with STM32CubeMX
然后通过CubeMX对芯片进行配置:
先选择芯片型号,默认给的Stm32F0芯片,点击更改成你自己的芯片型号,CubeMX会根据对应的芯片生成对应的启动文件,到时候工程就使用它生成的启动文件。

点此处修改芯片型号

输入你的芯片型号

选中后双击点进去

由于我们不使用Hal库,所以不对芯片做任何配置,直接点击Project Manager

工程配置
1.输入Project Name,注意一定要和你Clion的工程名一模一样,路径也需要一模一样,这样CubeMX生成的工程就会直接覆盖Clion工程。
2.选择Toolchain/IDE为SW4STM32
3.根据需求选择堆栈大小,默认给的特别小,堆512B,栈1024B,要知道Stm32f103c8的SRAM有20KB=20480B,完全足够使用。
最后点击顶上的GENERATE CODE按钮项目就创建完毕了。直接把CubeMX关了就行。

Clion工程构建完毕后弹出这个窗口,直接关了
由于此处不使用调试工具,直接把这窗口关了,有需求者可以看我上面发的带佬写的博客进行配置。
打开main.c可以看到成功生成了hal库的代码,所有准备工作完成。

hal库工程生成完毕
标准库移植:
由于我们不使用Hal库,所以先把他生成的Core和Drivers文件删除,然后从Keil标准库模板工程中导入这些文件,我使用的是正点原子F103模板工程。

删掉这两个

我们需要导入上面四个文件夹中的.c和.h文件,导入后的效果如下:

工程目录
把导入的文件夹里无用的东西全部删除

删掉这些

删除后
再把.c文件和.h文件进行归类

归类后
注意:上面项目目录中没有导入STM32F10x_FWLib是因为里面东西太多了不好截图,我是最后导入的,最终效果如下:

工程目录

Stm32废物(Firm Ware)库
标准库文件导入完毕后,最后一步就是编译,通过修改Cmake文件编译我们刚才导入的c文件和h文件。只需修改第40行和42行即可。

仅需修改第40行和第42行
把第40行修改成我们工程中的C文件位置:分别是CORE,SYSTEM,USER和STM32F10x_FWLib
file(GLOB_RECURSE SOURCES "startup/*.*" "CORE/*.*" "SYSTEM/*.*" "STM32F10x_FWLib/*.*" "USER/*.*")
把第42行修改成我们工程中的H文件位置:分别是CORE/Inc,SYSTEM/Inc,USER/Inc和STM32F10x_FWLib/Inc
include_directories(CORE/Inc SYSTEM/Inc STM32F10x_FWLib/Inc USER/Inc)
最后点击Reload changes等待构建结束

Cmake文件
编译工程:
在编译前,我们需要打开stm32f10x.h,在里面加入两句话
#define STM32F10X_HD #define USE_STDPERIPH_DRIVER
这两个宏定义在Keil里是在此处定义的,所以移植到Clion我们要手动加上

Keil宏定义

在此处加上宏定义
重点
再打开core_cm3.c修改第736行和753行,如果不改编译直接报错Assembler messages:Error

core_cm3.c未修改
736行改成:
__ASM volatile("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
753行改成:
__ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

core_cm3.c修改后
最后打开sys.c,把里面的代码改成:
#include "../Inc/sys.h"
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
void WFI_SET(void)
{
__ASM volatile("wfi");
}
//关闭所有中断
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}

sys.c修改后
终于所有代码全部修改完毕,可以编译了!
这里总结下,修改了哪些地方:
1.stm32f10x.h中加入了两句宏定义
2.core_cm3.c中第736行和753行修改了两句内联汇编
3.sys.c中修改了内联汇编
编译:
上面配置完毕后直接点击绿色三角编译工程,在编译之前我们main.c文件里一堆报错,编译之后就能正常使用了。

main.c编译前

舒服,终于编译成功了
编译完毕后,再看main.c文件,没有任何报错了,并可以直接调用标准库函数

使用效果图
很舒服,终于编译成功,不过还有个printf()函数,直接使用的话是无法输出到串口的,可以自己封装一个串口打印函数,十分简单。
可以清晰地看到,printf()是无法打印到串口的

运行效果
至此,关于F103标准库的移植已经结束,对于f4系列的移植比f103简单很多,仅需要在stm32f4xx里添加宏定义即可。
#define USE_STDPERIPH_DRIVER #define STM32F411xE
按照你芯片的需求定义,参照此处

根据你的芯片型号,选择对应的宏定义
至于为什么要用Clion开发,首先是因为颜值和功能强劲,官方支持stm32cubemx工程和调试工具,其次Clion在许多平台上都能使用,Mac,Linux和Windows都可以使用。
至于为什么要用Clion移植标准库,hal库开发这么简单,非要用标准库呢?原因上面我已经说了,这功能我可以不用,但是我不能没有。
相信很多人都懒得按照我上面的步骤一步步操作,毕竟我自己看了都嫌烦,所以我直接把工程模板发出来,目前只有F1和F4系列(我给的是F411的,其他型号直接按需求改stm32f4xx.h宏定义就行,F1不用管)的,其他系列标准库移植同理。
工程模板链接:
链接:https://pan.baidu.com/s/1gGvMgvZ2yIfCpolGt2HNWA
提取码:ALYA
下载完成后直接用Clion的File->Open...打开,导入后他会报错,说路径不对,点击Tools->Cmake->Reset Cache and Reload Project,完成后就可以正常编译了

先点这个

导入工程后点击编译即可
- 基于clion的野火stm32标准库开发(printf打印已解决)
- 用clion和stm32cube开发stm32
- 配置CLion + STM32CubeMX开发环境
- 在CLion中开发STM32
- STM32与CLion集成开发环境新项目创建指南
- Clion 2024版本 platformio 51单片机 头文件路径加载解决方案
- clion openocd调试stm32
- Clion开发STM32添加文件后编译报错“No such file or directory“
- macOS配置Clion用于STM32开发找不到stdint.h等头文件问题解决方案
- 意法半导体携手华虹实现STM32 MCU本土量产交付!
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 蓝牙信道探测技术原理与开发套件实践
- 意法半导体中国本地造STM32微控制器启动规模量产




