使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向) 您所在的位置:网站首页 clion怎么用md 使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向)

使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向)

2024-07-09 19:20| 来源: 网络整理| 查看: 265

文章目录 摘要下载安装clion下载arm-gcc下载配置openocd下载安装STM23Cubemx新建demo工程使用CubeMX生成初始化代码使用Clion写代码和烧录固件有插件且已经配置过一次情况没有插件情况调试printf重定向断点调试调试查看外设寄存器值 写在后面

摘要

在嵌入式领域中开发以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单片机:stm32f103rct6IDE: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相比稍逊色些,但仍然可以断点调试、查看寄存器、反汇编、查看内存、变量值

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 /* 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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有