Why CLion?

Keil操作简单,容易上手,而且可以很方便地进行调试,不过其古老的界面,不符合人类直觉的操作,不符合现代的编程习惯,必然会被逐渐淘汰。

Jetbrains系IDE具有强大的代码补全、界面风格、各种插件、流畅性等众多优点,毫无疑问能够极大提高开发效率,其中CLion就是专门面向C/C++开发的IDE。

工具链Toolchains

  • 代码编辑器:CLion

  • 编译器:MinGW、arm-none-eabi-gcc

  • 调试器:OpenOCD

  • HAL代码生成器:STM32CubeMX

Debugger

  • cmsis-dap

  • stlink

  • jlink

  • etc.

工具安装

  1. STM32CubeMX
  2. OpenOCD 或者用xpack-openocd
  3. MinGW(这是MinGW的在线安装器)
  4. CLion
  5. arm-none-eabi-gcc

几点注意

  1. 建议OpenOCD、MinGW、arm-none-eabi-gcc解压 / 安装到一个特定的目录(eg. /program-tools/)

  2. MinGW可能安装过程中会由于网络原因卡死,可以尝试离线安装或连接到国际互联网

  3. Jetbrains学生账号可以免费使用CLion等IDE,请抵制盗版

  4. 完成安装 / 解压后,将OpenOCD、arm-none-eabi-gcc、MinGW对应文件夹下的bin添加到系统环境变量Path里

image-20240727221710143

验证安装

在CMD或PowerShell中,

  1. 输入gcc -v,有输出则说明MinGW安装正确
  2. 输入arm-none-eabi-gcc -v,有输出则说明arm-none-eabi-gcc配置正确
  3. 输入openocd -v,有输出则说明OpenOCD配置正确

image-20240727221618827

CLion配置

进入设置-构建、执行、部署-工具链,设置一下MinGW相关的配置,注意调试器不要改,不然后面会无法连接到Debuggerimage-20240727222254196

在设置-构建、执行、部署-嵌入式开发里配置一下OpenOCD、STM32CubeMX的路径

image-20240727222617731

新建项目(CubeMX)

打开STM32CubeMX,随便选个芯片,按照下图配置创建项目

image-20240727222942789

image-20240727223013152

进入生成项目代码的目录,右键在CLion中打开

进来后选复制到项目并使用

image-20240727223541302

现在构建、编译、调试烧录代码应该都可以了

其他问题

  • 编译时报错 collect2.exe: error: ld returned 1 exit status

    解决方法:打开STM32XXX_FLASH.Id文件,删除所有的(READONLY)关键字,重新编译。

    原因:The “READONLY” keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier.

    GCC10或之前版本不支持“READONLY”关键字,GCC11才支持,删掉该关键词即可正常编译。

  • 重定向printf到uart

    添加retarget.cretarget.h到工程,在syscalls.c中把冲突的几个函数注释掉,在main.c串口初始化之后调用RetargetInit(UART_HandleTypeDef *huart)函数。

  • 打开硬件浮点数支持

    在CmakeLists.txt里取消这三行的注释。

image-20240728191654029

stm32-openocd-cfg-template

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#设置使用的调试烧录器为ST-Link
#source [find interface/stlink.cfg]

#设置使用的调试烧录器为J-link
#source [find interface/jlink.cfg]

#设置使用的调试烧录器为DAP-Link
#source [find interface/cmsis-dap.cfg]

#调试接口选择swd,此类型是ST-Link专用的
#transport select hla_swd

#调试接口选择swd,此类型是J-link,DAP-Link通用
#transport select swd

#指明调试速率
#adapter speed 5000

#设置目标芯片,选择stm32f1x,如果是f4系列的换成f4就行了其他系列以此类推
#source [find target/stm32f1x.cfg]