摘要
在嵌入式领域中开发以ARM公司的Cortex M内核为代表的单片机时程序员使用最多的IDE一定是Keil公司的MDK4 MDK5,而Keil已经脱离现代智能IDE,近年来IAR逐步向现代智能IDE靠近但还不足,一些芯片原厂提供了基于eclipse改装版IDE,这些工具在调试方面有优势,比如查看外设寄存器,内核寄存器,反汇编,支持多种调试器烧录固件,但在代码提示,代码跳转、代码重构、查找调用代码等等这些功能很匮乏,而Jetbrains公司的Clion是一款现代化跨平台IDE,不仅能编写传统c/c++程序,还能配合插件开发单片机程序,解决了传统嵌入式IDE的痛点。专业的嵌入式IDE是内置烧录调试工具,使用第三方IDE需要借助开源工具openocd,openocd有很多版本适配不同芯片能够满足使用。当前最热门的单片机就是stm32,得益于资料公开,有第三方板卡商家,SDK代码规范易读,甚至还有初始化代码生成工具CubeMX极大程度降低了嵌入式开发的门槛(有些国内半导体厂家的资料是传家宝见不得人),让嵌入式程序员更加注重应用。本文主要内容是使用Clion+CubeMX+arm-gcc+openocd开发stm32环境,当然不仅仅是开发stm32,只要是能使用gcc系列编译器编译代码,并配合编写编写的cmake脚本的都可以爆改适配,博主已经适配过乐鑫的ESP32、沁恒微电子的CH32。
关键字: Clion、STM32、CubeMX
环境说明
- 操作系统:win11
- 单片机:stm32f103rct6
- IDE:Clion2023
- 代码生成器:STM32CubeMX 6.8.1
- 工具链:amr-gcc
- 固件烧录软件:openocd -20231002
- 调试器:ST-Linkv2
下载安装clion
- 进入官网下载windos版,下载完成双击安装
- 点击下一步
- 选择安装路径,安装路径不要有空格和中文
- 安装选项,勾选如图就行了,再点击下一步
- 默认创建菜单文件夹,点击安装就开始安装了
- 安装完成选择稍后重启
下载arm-gcc
- 进入官网下载windos版arm交叉编译器,选择zip压缩包链接,解压后可以不用安装直接使用。
- 进入解压的bin文件夹,把这个路径添加到系统环境变量PATH中。以win11为例 设置 -->系统–>高级系统设置–>环境变量–>系统变量–>在PATH中添加解压后的bin文件夹路径
- 在命令行中验证添加成功没有,wim+r,输入cmd打开命令行,输入 arm-none-eabi-gcc.exe -v(注意隔了一个空格),出现了版本号说明添加成功,没有成功重启电脑系统重新加载环境变量再验证,还是没有验证成功查询下如何添加系统环境变量。
下载配置openocd
- 进入第三方网站(博主在官网没有找到已经编译好的程序只有源码)下载解压就行了,这个网站也提供arm-gcc下载。
- 安装驱动,本文使用的ST-Link,安装ST-Link驱动,双击bat脚本自动安装驱动
- 使用J-link时,先安装J-link驱动,再用UsbDriverTool软件转换USB驱动为libusb。
- openocd烧录调试程序时需要配置文件,下文提供了配置文件示例。调试烧录器配置项是通用的(为了演示提供的文件中设置了三种,选择一个就行了)适用于很多芯片,选择接口同理,文件命令后缀与上图相同,名字随意。
#设置使用的调试烧录器为ST-Linkv
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
#设置目标芯片,选择stm32f1x,如果是f4系列的换成f4就行了其他系列以此类推
source [find target/stm32f1x.cfg]
编辑完成文件保存到openocd的文件夹,方便在clion中选择配置文件
下载安装STM23Cubemx
- 进入官网,向下滑动页面,找到如图windos版栏,选择6.8.1版本,下载安装包需要登录st账号没有账号可以使用邮箱注册一个,注册以后ST时不时会往邮箱发一些新闻类邮件(可能是为了推广产品),所以选择一个不常用的但能收到邮件的邮箱就行了,博主测试高版本安装后发现有bug且需要登录账号才能下载开发包,下载后是一个压缩包,解压后直接双击安装。
- 点击下一步
- 同意下一步
- 同意下一步
- 选择安装路径,并下一步,安装路径不要有空格和中文
- 没有文件夹需要创建,点击确认
- 选择开始菜单文件,按需修改,点击下一步开始安装
- 安装完成,下一步
- 完成安装
- 启动CubeMX安装开发包(也可以不安装后续新建工程选择芯片自动下载)
- 选择对应芯片型号点击install安装,安装完成地点击clsoe退出
新建demo工程
使用CubeMX生成初始化代码
- 输入芯片名称选好型号,开始新建工程
- 配置外部时钟
- 配置调试器接口
- 配置GPIO点灯,引脚编号根据实际的板卡来,直接在右下侧配置IO为输出
- 配置外部时钟,注意使用的外部时钟频率与板卡匹配
- 工程配置,注意IDE选择STM32CubeIDE,Clion能转换这个工程为cmake工程
- 生成代码以源文件加头文件方式(方便模块化代码编写),再点击生成代码,弹框选择打开文件夹
使用Clion写代码和烧录固件
创建一个嵌入式如门经典demo工程点灯
- 右键菜单选择使用clion作为工程打开
- 第一次使用clion打开选择不发送
- 信任项目
有插件且已经配置过一次情况
- 选择openocd配置文件(没有弹窗可能是插件没有设置,后文再说明),没有图中的配置见上文提到的添加配置文件,由于博主是已经搭建过一次环境有一些配置和插件是以前的,还有登录账号会自动同步设置和插件。顺便提一下clion是一个收费软件,第一次使用会让登录账号激活,或者填入激活码,这部分移步其他地方查询方法,又能力的可以直接购买正版年费,想白嫖可以搞一个校园邮箱注册账号免费使用。
- 在while循环添加以下代码每隔500毫秒闪烁LED
while (1)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
- 有图中的图标说明已经安装了插件(新版已经默认绑定安装了),没有则看下文安装插件,点击锤子构建,右侧三角就是烧录,虫子是调试,调试注意打断点
没有插件情况
- 安装插件
- 第一步选择左侧的插件市场,为了演示本文选择已经安装选项(已经安装过的插件在插件市场搜不到)
- 安装完成进行插件设置,选择openocd存放路径,Cubemx安装路径,右侧有可以测试软件是否可用,完成点击OK退出
- 添加工程构建运行配置,添加完成后就有了上文提到的功能,就可以coding了
- 板卡配置文件见上文,点击右侧帮助会自动弹出选择窗口,点击确认配置完成
调试
调试功能同keil相比稍逊色些,但仍然可以断点调试、查看寄存器、反汇编、查看内存、变量值文章来源:https://www.toymoban.com/news/detail-856914.html
printf重定向
- 在clion中打开CubeMX工程文件,添加打印串口生成代码,关闭CubeMX回到Clion中
- 由于printf函数很耗时(库的原因)所以使用寄存器代码,在Core/Src/usart.c文件中添加以下代码
/* USER CODE BEGIN 1 */
int __io_putchar(int ch)
{
while ((USART1->SR & 0X40) == 0) // 等待上一次发送完
;
USART1->DR = (uint8_t)ch; //串口发送字符
return 1;
}
/* USER CODE END 1 */
- 在Core/Src/usart.h文件中添加以下代码
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
- 在Core/Src/main.c中添加以下代码,IO翻转根据实际情况填写参数,注意printf打印是带有缓冲的遇见换行才会打印输出
/* USER CODE BEGIN WHILE */
char str[] = "demo\n";
while (1)
{
for (int i = 0; i < 5; ++i)
{
printf("%d", i);
}
printf("%s", str);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
HAL_Delay(500);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
断点调试调试
- 打好断点,点击小虫子开始调试,在变量栏中右击显示内核寄存器值
- 调试菜单
- 在内存中查看变量值
查看外设寄存器值
- 查看外设寄存器,直接加载keil包中svd,svd文件在keil的Packs文件夹下,选择对应芯片的svd就行了
- 就能看见熟悉的寄存器了
- 以查看IO输出数据为例(ODR)
写在后面
如果本文对你有帮助不要吝啬你的点赞、收藏、评论、关注,你的支持将是我继续输出优质文章的动力,也欢迎嗮出你的博客一起进步文章来源地址https://www.toymoban.com/news/detail-856914.html
到了这里,关于使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!