stm32学习总结:2、搭建基于CLion的stm32开发环境
1. 前言
我们搭建基于CLion的环境实际主要是基于STM32CubeMx的,在CLion上编辑程序,然后基于c/c++的编译器和交叉编译器对相关库和程序进行编译,编译完烧写到stm32上,然后进行调试,这样就满足了程序开发、调试的基本要求。
2. 相关工具和环境准备
2.1 STM32CubeMX(前置工程创建工具)
STM32CubeMX是ST公司推出的一种自动创建单片机工程及初始化代码的工具,适用于旗下所有STM32系列产品。此软件可以作为eclipse插件形式安装,也可以单独运行,需要安装JAVA运行环境(关于Java环境安装,这里不再赘述,不知道的可以参考这里:https://blog.csdn.net/weixin_39510813/article/details/79834553)。建议采用管理员方式运行,因为ST对软件版本及其集成的库更新频繁,无管理员权限容易安装失败。
下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
像普通软件一样安装即可。
官方地址下有一些文档,最好看一下如何使用:
这个其实也有很多人用STM32CubeIDE进行开发的,属于Android studio一样的官方给的IDE,也可以下载学习了解一下:https://www.stmicroelectronics.com.cn/en/development-tools/stm32cubeide.html。
2.2 CLion(顺手的编辑器及集成工具)
实际上我们更多使用CLion更加顺手的编辑器功能,方便补全、跳转等,并且CLion提供了可以将编译工具、烧写工具、调试工具等集成起来的方式,然后编译、烧写、调试就可以在CLion当中一键执行了。
下载地址:https://www.jetbrains.com/clion/download/#section=windows
我下载的2020.3版本的,可以不用登录之类的。
2.3 MinGW(提供c/c++编译环境,也可以使用wsl等)
实际上开发stm32就是交叉编译适用于stm32平台的程序,所以会通过cmake生成适合交叉编译的makefile,然后执行make进行编译,所以这里Mingw主要提供make,CMake都是使用的默认CLion捆绑的。如果不在网上下载的话默认clion也会安装,一般开发Qt也会配置这个,所以这里的选择很多,可以使用Qt带的mingw,也可以使用clion自带的(不确定是不是都自带,可以随便建个项目然后在项目配置中看一下:配置-》构建、执行、部署-》工具链),也可以自己下载。
32位和64位的地址,这里由于我们stm32是需要交叉编译的,有自己的交叉编译工具链,所以这里下载32位或者64位mingw都不影响,我们仅仅使用其带有的make,或者两者都下载,有问题时进行切换选择即可:
http://sourceforge.net/projects/mingw/
http://sourceforge.net/projects/mingw-w64/
2.4 gcc-arm-none-eabi(交叉编译工具链及GDB)
这个就像是我们交叉编译arm-linux一样,只不过这里是交叉编译arm-stm32,换了一个交叉编译工具链。
下载地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
注意支持的版本:
我比较习惯Windows下使用安装方式,也可以下载压缩包解压直接使用,但需要手动加入路径到环境变量,直接安装方式最后一步可以选择将其加入到环境变量中,否则cmake会找不到相关的交叉编译工具链。
如果编译时报如下错误就是交叉编译工具链没有安装或者没有添加到环境变量中:
2.5 OpenOCD(烧写调试工具)
就像我们之前安装Android开发环境的NDK搭建时的LLDB也是用来调试的,但是我们通常用不到,都是用logcat直接看日志的,所以如果stm32有串口打印日志调试的话也可以暂时不安装OpenOCD。如果要安装的话可以在CLion上搜索插件OpenOCD:
也可以自行下载安装:https://www.gnutoolchains.com/arm-eabi/openocd/
后面我们再统一进行配置。
3. 新建stm32项目及CLion配置集成
接下来通过CLion将各部分整合起来即可。
3.1 新建项目
3.2 创建项目源
3.3 STM32CubeMX配置及生成代码
一般选择连接到mcu选择,这里我们作为示例也可以选择最后一个连接一个示例选择:
然后根据自己手头的mcu的参数进行选择,比如我这里是STM32L471RE,在左上角搜索即可:
然后进行引脚、时钟配置,这个需要一些电子相关的基础,不太清楚的软工可以问一下硬件工程师,不懂就问,没有啥不好意思的,但是不要跟个大爷一样的,别人没有义务免费帮助你(我们这里还没有具体测试的代码,等下一节总结学习点亮LED灯的时候再具体说一下这个配置,这里先随便选择一下保证可以编译成功就行):
项目管理这里注意一下IDE,目前看IAR、MDK等IDE都支持了,这里我们CLion使用SW4STM32,还有项目名称不能带一些特殊符号:
还有一些其它的功能暂时没有摸索过,可以在官网找文档详细看一下,配置好后点击右上角的GENERATE CODE生成代码即可(第一次会下载相关的库等内容),生成完毕后关闭即可:
3.4 集成配置交叉编译工具链及OpenOCD
在生成代码后重新进入CLion界面,会让你选择.cfg文件,这里需要了解一下OpenOCD的使用:https://openocd.org/pages/documentation.html,OpenOCD是开放式的芯片调试器,是以开发板为单位生成cfg文件进行配置的,所以我们可以根据相似的配置文件来修改适合自己板子的。
openOCD,一般安装方式的话CLion可以自动检测到:
之后需要修改.cfg文件,参考:
-
除注释外,cfg文件原内容如下: set FLASH_SIZE 0x20000
source [find target/stm32f1x.cfg]
-
我们修改之后的内容如下: # 设置调试器为cmsis-dap
source [find interface/cmsis-dap.cfg]
# 设置调试器所用接口为SWD
transport select swd
# 定义Flash大小为64K
set FLASH_SIZE 0X10000
# 设置芯片
source [find target/stm32f1x.cfg]
这个.cfg文件可以在项目配置中找到并拷贝一份出来修改:
3.5 编译、烧写及调试
编译、调试和一般使用CLion编译、调试c/c++程序没有什么区别,但是烧写和OpenOCD有关系,这块的配置需要结合你的板子和环境进行修改,按照上面给的模板cfg进行调整即可。
从上图也可以看出来,是cmake进行交叉编译生成可执行文件,之后通过OpenOCD配置下载和运行在板子上。
4. 创建示例项目
CLion创建stm32项目的过程不变。
我们在开始选择连接项目的时候可以选择一个开发板,这种方式可以保证生成的代码一定可以编译过,对于不属于硬件配置过程的时候熟悉项目创建有一定的帮助,创建项目后也可以大致看一下整体项目结构:
注意创建的项目位置,否则无法自动生成cmake模板,之后点击生成代码,然后都选择Yes即可:
编译结果:
5. 最后
由于依赖于硬件平台,并且外设接口需要动态配置,所以创建项目会复杂一些,不管是使用mdk还是IAR等这些工具都需要慢慢熟悉项目创建,上手确实有一些难度,好在像stm32等硬件平台也在封装硬件接口以及开发工具,尽可能少的暴露硬件相关的内容,已经降低了不少的难度,现在也已经涌现出不少的rtos,相信单片机软件开发也会慢慢变得容易上手(什么时候像前端和Java、python等软件开发一样容易上手,那么单片机开发普及程度也会更上一层楼)。
参考:
https://segmentfault.com/a/1190000022798805
https://zhuanlan.zhihu.com/p/63672432
|