Clion + STM32cubeMX 搭建舒适的STM32开发环境
Clion+STM32cubeMX搭建stm32开发环境
本篇介绍的内容也是以基于HAL库
开发为准的
环境及所需工具
软件环境:
- Windows 10
- STM32CubeMX
- Clion-2019
- MinGW
- OpenOCD
- arm-none-eabi-gcc
硬件环境:
- STM32F103C6T6 或其他 STM32 开发板
- ST-Link V2 下载器
工具安装
STM32CubeMX
这个正常去官网下载的安装就行了
该软件用于配置时钟频率 gpio初始化等
版本号 <= 6.3.0 版本过高无法生成 后续文件
STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
OpenOCD
OpenOCD
OpenOCD是用于对STM32进行下载仿真的工具,是一个开源软件包,Windows版本下从这里下载,下载好解压到一个目录就行,后面会在Clion中链接这个目录:
MinGW
Clion需要使用MinGW环境来配置工具链,安装方法如下: 首先去MinGW主页下载最新版本的MinGW: Minimalist GNU for Windows,这是MinGW的安装器:
打开exe进行安装,修改安装目录(最好不能有空格),安装完成后进行组件下载:
如上图中所示,把Basic Setup
里面的组件全部勾选(也可也去掉不需要的语言编译器比如Objective-C)。
配置系统的环境变量,在Path环境变量里面添加一条,指向MinGW的bin文件夹:
重启电脑,然后在命令窗口中输入下面的命令验证安装是否成功: gcc -v
arm-none-eabi-gcc Windows到这里下载:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ,选择ZIP压缩包形式的:
解压到一个文件夹,并把安装目录下的bin文件夹添加到环境变量:
然后重启使得环境变量生效之后可以在命令行里用以下语句测试: arm-none-eabi-gcc -v 如果有信息输出,那就是装好了。
Clion配置
安装 很简单 这里就不详细说了
Clion是基于CMake来管理项目的,所以首选我们需要配置好预设的MinGW和CMake环境。
打开File-Settings-Build,Execution,Deployment
选项卡,在Toolchains
下面添加一个MinGW环境:
将 C 编译器 选为arm-none-eabi-gcc bin 文件夹下的 xxx-gcc.exe
将 C++ 编译器 选为arm-none-eabi-gcc bin 文件夹下的 xxx-g++.exe
注意Debugger不要改,否则断点调试的时候无法连接。
然后再CMake
栏下确认一下工具链是否正确:
在设置-> 构建、执行、部署 -> 嵌入式开发
绑定 openOCD 与 STM32cubeMX
至此Clion环境配置完成,可以创建STM32项目了。
新建工程
选择嵌入式
位置 你想要存放的位置 最后一个文件 就是项目名称
例如 我的工程叫 GPIO_demo
在 G 盘 Stm32_Project 下
新建完 就是如下界面 点击跳过
选择 通过STM32cubeMX 打开
打开STM32cubeMX
- 点击STM32F030F4Px 选择自己的芯片型号
在Part Number 搜索自己的芯片
点击Start Project
设置引脚功能
注意:这里的内容需要根据 自己手里的开发板 操作
可以看到 我的LED 是RGB的 其中红色引脚在PA0
在 如下图中 点击 引脚 设置为output
下面设置该引脚名称
引脚右键 弹出如下菜单 选择ENter User Lable
我设置为LED_R
引脚设置完成
设置时钟
选择Rcc 设置为图二的样子 使用外部晶振
配置时钟树
在Clock Configuration 配置为 图二的样子 是103c6t6 在72Mhz的频率下工作
设置项目生成
这里有几个需要注意的地方
Name 必须和clion 生成的项目名字一样
Toolchain/IDE 需要设置为SW4STM32 如果没有 就是STM32cubeMX版本太高了
完事 之后 点击 cenereate code
弹出如下对话框 点击关闭就可
自此STM32cubeMX设置完成
写代码在 Core/Src 里
三个按钮 分别是 编译 下载 调试
点击 编译会出现 烧录文件
烧录程序 & 在线调试
在Keil
里面我们烧录程序的时候要指定使用的下载器(J-Link、ST-Link、CMSIS-DAP等),Clion
烧录程序之前通用需要进行一些设置。
点击编译按钮旁边的配置栏下拉,选Edit Configurations 或者 编辑配置
,打开配置窗口:
可以看到没有设置板子的config文件所以出现警告错误,这个配置文件就是前面说的需要自己生成的文件。
我们在工程根目录下新建一个文件夹config
,在里面新建一个配置文件daplink.cfg
(因为我这里使用的是STlink
V2作为仿真器),文件的内容如下:
1 | # choose st-link/j-link/dap-link etc. |
前两行设置了仿真器的类型和接口,下面几行指定了Flash大小、芯片类型、下载速度等。
如果对自己的芯片不知道怎么设置,可以参考OpenOCD自带的一系列配置文件,路径在OpenOCD安装目录的share\openocd\scripts
下:
只需要关注这几个目录:
- board:板卡配置,各种官方板卡
- interface:仿真器类型配置,比如ST-Link、CMSIS-DAP等都在里面
- target:芯片类型配置,STM32F1xx、STM32L0XX等等都在里面
设置好配置文件之后,就可以点击下载或者调试按钮进行下载和在线调试了。
在配置文件中不要加
reset_config srst_only
这一句,会导致下载失败,这一句是指示系统重启的,删除不影响下载。
CLion里面是支持全功能的单步断点调试的,也能在代码里直接观察变量的值,非常舒服~
最后说明一下,CLion中组织编译规则都是基于CMakeLists.txt文件的,如果熟悉CMake应该会觉得很方便很强大,不熟悉的也没事,基本不需要额外修改什么,只需要知道怎么在这个文件里面添加源码目录和include文件夹的路径就行了:
1 | include_directories( |
printf
重定向问题
在Clion中链接的是GNU-Tools-ARM-Embedded\arm-none-eabi\include
里面的stdio.h
,如果仍然想使用printf
函数功能,则需要进行如下操作:
新建一个retarget.h文件内容如下:
1 |
|
再新建一个retarget.c文件内容如下:
1 |
|
添加这两个文件到工程,更新CMake,编译之后会发现,有几个系统函数重复定义了,被重复定义的函数位于Src
目录的syscalls.c
文件中,我们把里面重复的几个函数删掉即可。
在main函数的初始化代码中添加对头文件的引用并注册重定向的串口号:
1 |
|
配置完成
上面的修改完成之后可能会发现无法正常读取浮点数,这里修改CMakeList.txt,加入下述编译选项
1 | set(COMMON_FLAGS "-specs=nosys.specs -specs=nano.specs -u _printf_float -u _scanf_float") |