用CLion优雅地调试和开发STM32(CubeMX)
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.
工具安装
- STM32CubeMX
- OpenOCD 或者用xpack-openocd
- MinGW(这是MinGW的在线安装器)
- CLion
- arm-none-eabi-gcc
几点注意:
建议OpenOCD、MinGW、arm-none-eabi-gcc解压 / 安装到一个特定的目录(eg. /program-tools/)
MinGW可能安装过程中会由于网络原因卡死,可以尝试离线安装或连接到国际互联网
Jetbrains学生账号可以免费使用CLion等IDE,请抵制盗版
完成安装 / 解压后,将OpenOCD、arm-none-eabi-gcc、MinGW对应文件夹下的bin添加到系统环境变量Path里
验证安装
在CMD或PowerShell中,
- 输入gcc -v,有输出则说明MinGW安装正确
- 输入arm-none-eabi-gcc -v,有输出则说明arm-none-eabi-gcc配置正确
- 输入openocd -v,有输出则说明OpenOCD配置正确
CLion配置
进入设置-构建、执行、部署-工具链,设置一下MinGW相关的配置,注意调试器不要改,不然后面会无法连接到Debugger
在设置-构建、执行、部署-嵌入式开发里配置一下OpenOCD、STM32CubeMX的路径
新建项目(CubeMX)
打开STM32CubeMX,随便选个芯片,按照下图配置创建项目
进入生成项目代码的目录,右键在CLion中打开
进来后选复制到项目并使用
现在构建、编译、调试烧录代码应该都可以了
其他问题
编译时报错 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.c、retarget.h到工程,在syscalls.c中把冲突的几个函数注释掉,在main.c串口初始化之后调用RetargetInit(UART_HandleTypeDef *huart)函数。
打开硬件浮点数支持
在CmakeLists.txt里取消这三行的注释。
stm32-openocd-cfg-template
1 | #设置使用的调试烧录器为ST-Link |