文章目录
前言
本文详细讲解使用Clion开发STM32的过程。
从接触单片机编程开始,基本就一直在用keil软件进行开发,刚开始并没啥感觉,但后来使用过VScode、VS、Pycharm等一系列IDE后发现,Keil用起来太笨了!!!包括界面也是上个世纪的风格,而且代码提示做的太不智能了。因此就有了换IDE的想法。
作为稚晖君的铁粉,看到大佬用的是Clion进行开发,自然也想尝试一番。
稚晖君在知乎上也发过一篇关于Clion开发Stm32的文章,内容也是保姆级别的了,但是我在配置过程中仍然遇到不少问题,因此写下该篇文章,以此记录。
本文基于stm32的HAL库进行开发
一、需要使用的工具
软件环境
- STM32CubeMX
- Clion-2021
- MinGW
- OpenOCD
- gcc-arm-none-eabi
硬件环境
- STM32F103C6T6 小蓝板
- ST-Link V2
二、软件下载
1.STM32CubeMX
直接从ST官网下载可执行文件:
https://www.st.com/zh/development-tools/stm32cubemx.html
2. Clion
从官网直接下载,不过是个收费软件,可以去淘宝搜搜相关关键词。
3. OpenOCD
OpenOCD(Open On-Chip Debugger)开源片上调试器,是一款开源软件,提供针对嵌入式设备的调试、系统编程和边界扫描功能。配合JTAG调试协议,可以对硬件设备进行指令集级别和寄存器级别的调试。
Windows下载地址:
https://gnutoolchains.com/arm-eabi/openocd/
下载后随便解压到一个目录即可。
4. gcc-arm-none-eabi
gcc-arm-none-eabi 承担着编译器的功能,gcc是GNU编译器套件(GNU Compiler Collection)的缩写,arm则是表示的ARM类型单片机,none表示编程程序运行在裸机系统上,eabi(Embedded Application Binary Interface)表示嵌入式应用二进制接口。详细资料可自行百度。
安装地址:
https://developer.arm.com/downloads/-/gnu-rm
5. MinGW
Clion需要使用MinGW环境来进行工具链的配置,安装方法如下(参考稚晖君的下载方式):
到MinGW主页下载最新的版本:
https://osdn.net/projects/mingw/releases/
下载后是一个可执行文件:
双击运行,直接安装即可,另外需要把Basic Setup里面的组件全部勾选。
本人在使用上述方法时发现无法连接,总是出现download failed等错误:
错误原因:服务器在外网,可能无法连接,连接出错。
解决方法:
可以直接下载离线安装包进行安装,下载地址:
https://sourceforge.net/projects/mingw-w64/files/
不要直接点Download Latest Version
选择Files,然后往下拉:
下载后随便找个目录解压即可,至此完成所需软件的下载。
可以将OpenOCD、MinGW、gcc-arm-none-eabi放在同一目录下,便于后续操作与管理。
三、相关配置
1. 添加系统环境变量
主要添加两个:MinGW和gcc-arm-none-eabi
步骤: 我的电脑右键----> 属性
选中系统变量中的Path,点击右下方编辑:
再点击新建:
将mingw64和gcc-arm-none-eabi文件夹下的bin文件添加到路径中,如下所示:
然后,可以打开Windows命令行,分别输入如下指令:
arm-none-eabi-gcc -v
gcc -v
如果有输出,说明安装成功。
2. CLion配置
- 打开 文件—设置—构建、执行、部署—工具链,添加一个MinGW工具链
注意:调试器不要改
- 然后确认CMake选项栏下的工具链是否正确:
- 在嵌入式开发选项卡下修改OpenOCD和STM32CubeMX的位置,可以点击后面的测试来验证是否正确。
四、CLion创建项目
在 文件—新建—项目 下可以看到STM32CubeMX的工程:
点击新建后会生成一个.ioc文件,可以使用STM32CubeMX直接打开,配置单片机的参数。
【需要注意的是:项目名称一定要和在Clion中建立的一致,也就是工具链文件夹最后一级】否则会生成另一个文件,Clion没有任何响应,如果生成正确,Clion会自动产生CMakeList文件。
另外生成的IDE类型选择SW4STM32
修改完后,弹窗点击Close,Clion会自动更新文件。
第一次设置会出现一个板卡选择窗口,一般情况下不需要管,直接关掉,后续我们自己进行配置。
程序烧录
工程目录下新建一个文件夹 config ,在里面新建一个配置文件ST-link.cfg,名字可以随便起,但结尾一定是.cfg类型。
内容如下:
# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
如果对自己的芯片不知道怎么设置,可以参考OpenOCD自带的一系列配置文件,在安装目录下:
share\openocd\scripts
board:板卡配置,各种官方板卡
interface:仿真器类型配置,比如ST-Link、CMSIS-DAP等都在里面
target:芯片类型配置,STM32F1xx、STM32L0XX等等都在里面
点击调试配置对话框,如图所示:
选择编辑配置,然后在面板配置文件选项中,将刚才保存的.cfg文件添加到路径。然后可以将重置处选择为运行,使程序下载后单片机不需要复位即可运行程序。
最后在进行模块化编程时,需要添加编译文件和头文件路径。在CMakeList.txt文件中进行修改。主要关心两部分:
添加头文件的地方:
include_directories(Core/Inc
MyApplication
Drivers/STM32F1xx_HAL_Driver/Inc
Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
Drivers/CMSIS/Device/ST/STM32F1xx/Include
Drivers/CMSIS/Include)
需要编译文件的地方:
file(GLOB_RECURSE SOURCES "startup/*.*" "Drivers/*.*" "Core/*.*" "MyApplication/*.*")
其中:
*.*表示通配符,也就是这个文件夹里的所有文件都会被编译
五、测试案例
以点亮LED为例来测试上述配置是否可行:
1.利用Clion创建好项目后先配置STM32CubeMX
我将Clion项目生成在了桌面上
用STM32CubeMX配置时,项目目录设置
选择LED(PC13引脚)为推挽输出模式。
时钟主频72Mhz。
Debug选择Serial Wire。
生成代码后Clion后自动检测:
然后就是新建文件夹config,将前面提到的ST-link.cfg文件放入。
并导入到运行/调试配置中。
可以修改一下CMake生成的文件夹名称,便于管理。
2.配置完后就可以把LED闪烁的程序敲上:
然后点击下载运行即可:
效果图:
能够看到LED实现了期望的效果。
测试成功!!