stm32cubeide 是支持linux的,可以用它在linux下来开发stm32,但是cubeide是魔改版的eclipse,反正我是用不习惯,太难用了。clion貌似从2019就指数stm32 了,所以打算试一试。
官网
clion 是jetbrains全家桶里的一个,收费,可以试用一个月
这样我们可以用cubemx自动生成一些配置代码,非常方便,当然你也可以全部手撸不嫌费事的话。stm32cubeide=eclipse+cubemx,我们相当于把eclipse换成clion。
建议去st官网下载
官网
点击下载后可以能会让你输入邮箱,然后自动跳出下载内容
下载后解压,执行解压目录下的可执行文件,选择默认安装位置即可
注意ubuntu 的apt源里可以安装openocd,但是版本是0.10,不支持stlink V3,建议从源码编译安装
sudo apt install openocd
sudo apt install gcc-arm-none-eabi
打开设置->构建、执行和部署->嵌入式开发
配置你的openocd和stm32cubemx的位置,定位到可执行文件,点击一下测试看看是否正确
ps: 插件库可以下载官方的中文汉化包
注意记住自己起的工程的名字,这里我起名test,后面要用
正在创建
创建完成后点击通过stm32cubemx打开
stm32cubemx打开后是一默认的单片机,这里点击型号选择自己的芯片型号
我的板子是stm32f407,然后点击开始工程
出现了407的引脚图
后面设置时钟,配置io啥的不讲了,不了解的自行百度stm32cubemx的使用教程
这里注意工程名一定要和刚刚创建的一致,路径也要仔细检查,这样才会覆盖旧的文件,否则clion会自动创建一个子文件夹,导致不能正确读取配置
这里选择创建.h文件,项目结构会更清晰,方便后续开发
这里选择不自动生成main函数
解释一下原因:我想把main函数放到我自己创建的代码文件里,如果不勾选,每次用mx更新代码后,即使你删除了它自动生成的main函数,还是又自动创建,就很烦,所以我选择不生成,至于为什么我要把main函数放到其他文件里,后面会说
Toolchain/IDE就选择stm32cubeide就行
出现这样表示配置成功,否则请检查一下路径和名称创建成功后,不要选择打开文件或工程,直接close就行,回到clion
clion自动检测到工程,我是f407,clion自动给我选择了f4的openocd配置文件,很智能,这里选择复制到项目并使用,放到项目里好修改
配置一下openocd
407的flash是512kb,我用的stlink,swd调试
mx自动生成的main.c文件里有几个初始化的函数,我们手动把定义移动到main.h中,因为我后面不用main.c作为程序入口,只把它作为一个普通代码文件,只不过名字就main.c/main.h,如果你的程序入口打算就用main.c,那么可以不同改动。
这里系统时钟的配置函数是在main.c中定义的,我把它在mian.h中再定义一次,这样使用时只要包含main.h就行了。
为啥不把main.c删除呢,因为每次更新配置后mx会自动生成main.c,否则我早删除了,现在这样是把它作为一个普通文件存在
接下来重点了,为啥要在自己的文件里定义main函数呢,因为我要用C++,哈哈,clion写c++,爽到爆,智能提示好用度比stm32cubeide高100倍
说明一下,现在arm-gcc/arm-g++编译器是支持C++的,keil5 的编译器V6版也是支持C++的。
可能有些高级库不支持,但基本上C++11的功能大多支持的。至于说C++编译后程序体积比纯C大问题,看项目情况,如果芯片空间大的话,能用C++还是果断用,底层驱动用C,上层业务用C++,个人觉得是很合理的。
我们定义个简单的控制led开关的类程序完成后配置一下启动任务,把下载勾选始终下载,这样每次点击运行后,会先把程序自动下载进去
编译会报错,找不到我们刚刚添加的main.cpp
点击
再次编译,成功
点击运行
这里选运行,默认是初始化,需要手动复位才会进入调试状态,选择运行后,我们点击调试,程序会自动下载并运行,进入调试状态。
![请添加图片描述](https://img-blog.csdnimg.cn/6bc19861631d486aab3f28e847793e0c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Z-z5p-v6Lev5b63,size_20,color_FFFFFF,t_70,g_se,x_16