这两天尝试用Clion修改原来 野火霸道V2开发板 的Keil例程工程,碰到好多问题,总算跑通了,可以正常编译下载,串口打印。这些碰到的问题都记录在之前的文章里。
最后我得到了这个工程,将它命名为F103_Template(红色部分是下载到开发板成功时的控制台日志):

我这个跑通的CLion工程是在原来的 USART1接发 Keil工程的基础上转换过来的。

日后继续看B站视频,但要用Clion学习其他没有学完的例程。所以配套的Keil例程都要转换成CLion工程。这里整理一下怎样将某个Keil工程快速转换成CLion工程。这个过程会用到上面已经跑通了的CLion工程。
注:之前已经写了文章怎样把Keil工程转化成CLion工程,这篇文章的目的是为了尽量简化将Keil工程转化为CLion工程的繁琐流程(尽管还是不够精简,多希望有个批处理文件可以一键修改😂)。
下面以
一、用CLion创建工程
1.新建并链接STM32CubeMX
File → New → Project → STM32CubeMX
填入自己的项目名称,请避免用中文。

等待STM32CubeMX启动:

选择适合自己开发板的配置文件(我选择的是自制的,相关问题移步参考文章1):
点击打开STM32CubeMX

选择对应的芯片型号,开始创建Project:

Project Manager里如下设置:


最后点击GENERATE CODE生成项目代码,选择Yes:

至此可以关闭CubeMX软件。
GENERATE CODE之前的文件夹:

GENERATE CODE之后的文件夹:

2.用修改文件的方式生成工程
要生成工程其实也可以不用这种方式,可以直接拷贝之前整理好的模板工程F103_Template,修改 project 相关文件(貌似是.cproject和.project这两个文件)内的信息,使之成为新的工程,但涉及到的文件修改比较繁杂,等我研究试好了再总结一下看哪一种更便捷。
二、拷贝整理好的目录模板并添加新文件
将生成的文件夹下的Core文件夹和Drivers文件夹删除,因为要用到的标准库文件,我们自己已经整理好了一份,把这一份删除。

F103_Template文件夹里有整理好的文件目录,就是Libraries文件夹和User文件夹,可以拿来直接拷贝给新工程用。

然后添加Keil工程中的其它额外的.h和.c文件进来。放到User的Inc和Src里面。不过记得要把一些头文件包含的语句修改一下,因为我们全都放在Inc和Src里了,只保留文件名即可。例如:

例如,我转换下列Keil工程:

把文件搬到CLion工程里:

三、修改CMakeList
用CLion打开工程,找到CMakeLists.txt文件,找到下列两行

修改为:

其实就是目录修改一下,因为我们整理了目录,和自动生成的目录不一样了。
include_directories(Libraries/CMSIS/inc Libraries/FWlib/inc User/Inc)
file(GLOB_RECURSE SOURCES "libraries/*.*" "User/*.*")
然后控制台刷新CMake:
如果不改这这两处,则会出现下列提示:
CMake Error: CMake can not determine linker language for target: Demo.elf

四、编译/下载工程
点击build:

连接开发板到电脑,开发板上电,CLion中点击run(因为我的CLion已经配置好了OCD):

下载成功!!!
验证程序效果:
/*********************************************************************************************/
【*】程序简介-工程名称:DMA 存储器到外设模式实验
-实验平台: 野火STM32 霸道 开发板【 !】功能简介:
利用DMA向串口发送大量的数据,同时让CPU控制LED的状态
【 !】实验操作:
把编译好的程序下载到开发板。程序运行后在串口调试助手可接收到大量的数据,同时开发板上RGB彩色灯不断闪烁。

开发板LED灯正常闪烁。
五、补充说明
Libraries/CMSIS/inc/stm32f10x.h文件里的两处宏定义很重要,因为我整理好的目录里这个文件是修改好了的,所以没特别提出来。
#define STM32F10X_HD
#define USE_STDPERIPH_DRIVER

参考文章:
本文详细描述了如何将Keil工程转换为Clion项目,包括使用STM32CubeMX配置、删除自定义库、调整CMakeLists和添加额外文件,以便在Clion中编译和下载STM32应用。
1353

被折叠的 条评论
为什么被折叠?



