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

这篇具有很好参考价值的文章主要介绍了使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,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
  • 单片机:stm32f103rct6
  • IDE:Clion2023
  • 代码生成器:STM32CubeMX 6.8.1
  • 工具链:amr-gcc
  • 固件烧录软件:openocd -20231002
  • 调试器:ST-Linkv2

下载安装clion

  • 进入官网下载windos版,下载完成双击安装
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 点击下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 选择安装路径,安装路径不要有空格和中文
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 安装选项,勾选如图就行了,再点击下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 默认创建菜单文件夹,点击安装就开始安装了
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 安装完成选择稍后重启
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

下载arm-gcc

  • 进入官网下载windos版arm交叉编译器,选择zip压缩包链接,解压后可以不用安装直接使用。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 进入解压的bin文件夹,把这个路径添加到系统环境变量PATH中。以win11为例 设置 -->系统–>高级系统设置–>环境变量–>系统变量–>在PATH中添加解压后的bin文件夹路径
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 在命令行中验证添加成功没有,wim+r,输入cmd打开命令行,输入 arm-none-eabi-gcc.exe -v(注意隔了一个空格),出现了版本号说明添加成功,没有成功重启电脑系统重新加载环境变量再验证,还是没有验证成功查询下如何添加系统环境变量。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

下载配置openocd

  • 进入第三方网站(博主在官网没有找到已经编译好的程序只有源码)下载解压就行了,这个网站也提供arm-gcc下载。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 安装驱动,本文使用的ST-Link,安装ST-Link驱动,双击bat脚本自动安装驱动
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 使用J-link时,先安装J-link驱动,再用UsbDriverTool软件转换USB驱动为libusb。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 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中选择配置文件
clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机


下载安装STM23Cubemx

  • 进入官网,向下滑动页面,找到如图windos版栏,选择6.8.1版本,下载安装包需要登录st账号没有账号可以使用邮箱注册一个,注册以后ST时不时会往邮箱发一些新闻类邮件(可能是为了推广产品),所以选择一个不常用的但能收到邮件的邮箱就行了,博主测试高版本安装后发现有bug且需要登录账号才能下载开发包,下载后是一个压缩包,解压后直接双击安装。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 点击下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 同意下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 同意下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 选择安装路径,并下一步,安装路径不要有空格和中文
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 没有文件夹需要创建,点击确认
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 选择开始菜单文件,按需修改,点击下一步开始安装
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 安装完成,下一步
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 完成安装
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 启动CubeMX安装开发包(也可以不安装后续新建工程选择芯片自动下载)
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 选择对应芯片型号点击install安装,安装完成地点击clsoe退出
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

新建demo工程

使用CubeMX生成初始化代码

clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

  • 输入芯片名称选好型号,开始新建工程
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 配置外部时钟
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 配置调试器接口
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 配置GPIO点灯,引脚编号根据实际的板卡来,直接在右下侧配置IO为输出
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 配置外部时钟,注意使用的外部时钟频率与板卡匹配clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 工程配置,注意IDE选择STM32CubeIDE,Clion能转换这个工程为cmake工程clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 生成代码以源文件加头文件方式(方便模块化代码编写),再点击生成代码,弹框选择打开文件夹clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

使用Clion写代码和烧录固件

创建一个嵌入式如门经典demo工程点灯

  • 右键菜单选择使用clion作为工程打开
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 第一次使用clion打开选择不发送
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 信任项目
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

有插件且已经配置过一次情况

  • 选择openocd配置文件(没有弹窗可能是插件没有设置,后文再说明),没有图中的配置见上文提到的添加配置文件,由于博主是已经搭建过一次环境有一些配置和插件是以前的,还有登录账号会自动同步设置和插件。顺便提一下clion是一个收费软件,第一次使用会让登录账号激活,或者填入激活码,这部分移步其他地方查询方法,又能力的可以直接购买正版年费,想白嫖可以搞一个校园邮箱注册账号免费使用。
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 在while循环添加以下代码每隔500毫秒闪烁LED
  while (1)
  {
      HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
      HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  • 有图中的图标说明已经安装了插件(新版已经默认绑定安装了),没有则看下文安装插件,点击锤子构建,右侧三角就是烧录,虫子是调试,调试注意打断点
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

没有插件情况

  • 安装插件
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 第一步选择左侧的插件市场,为了演示本文选择已经安装选项(已经安装过的插件在插件市场搜不到)
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 安装完成进行插件设置,选择openocd存放路径,Cubemx安装路径,右侧有可以测试软件是否可用,完成点击OK退出
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 添加工程构建运行配置,添加完成后就有了上文提到的功能,就可以coding了
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 板卡配置文件见上文,点击右侧帮助会自动弹出选择窗口,点击确认配置完成
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

调试

调试功能同keil相比稍逊色些,但仍然可以断点调试、查看寄存器、反汇编、查看内存、变量值

printf重定向
  • 在clion中打开CubeMX工程文件,添加打印串口生成代码,关闭CubeMX回到Clion中
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 由于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 */
  }
断点调试调试
  • 打好断点,点击小虫子开始调试,在变量栏中右击显示内核寄存器值
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 调试菜单
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 在内存中查看变量值
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
查看外设寄存器值
  • 查看外设寄存器,直接加载keil包中svd,svd文件在keil的Packs文件夹下,选择对应芯片的svd就行了
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 就能看见熟悉的寄存器了
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机
  • 以查看IO输出数据为例(ODR)
    clion debug 的时候显示通用寄存器的值,工具,stm32,嵌入式硬件,单片机

写在后面

如果本文对你有帮助不要吝啬你的点赞、收藏、评论、关注,你的支持将是我继续输出优质文章的动力,也欢迎嗮出你的博客一起进步文章来源地址https://www.toymoban.com/news/detail-856914.html

到了这里,关于使用clion配合STM32CubeMX开发stm32(包含断点调试,查看寄存器值,printf重定向)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX里面没有 CLion的SW4STM32选项(CLion修改单片机型号)

            大家在使用最新版本的CubeMX按照网上的一些教程配置CLion时通常会遇到编译器选项里面没有SW4STM32的选项的问题。          根据网上的很多人都会要求把CubeMX降低到某个版本以下,但是一直使用低版本肯定不是解决问题的方法。其实在CLion文档里面就有解决方

    2024年02月05日
    浏览(38)
  • 优雅的使用CLion开发STM32 2023最新版本~

    一共需要的资料如下 ✈代表需要魔法 没有标注可直接访问 Clion 下载链接 cubemx 下载链接 mingw 下载连接 ✈ 安装完直接解压到文件夹 并且把bin文件的路径存入path环境变量 gcc 下载链接✈ 安装完直接解压到文件夹 并且把bin文件的路径存入path环境变量 openocd 下载链接 安装完直接

    2024年02月16日
    浏览(42)
  • STM32配合CubeMX硬件SPI驱动0.96寸OLED

    目录 一、简单介绍 1.1 OLED 1.2 SPI协议 接口 优点 缺点 数据传输 二、实战 2.1 工程配置 2.2 测试工程 2.3 波形分析 三、驱动OLED 3.1 初始化代码 3.2 清屏函数 3.3 设置坐标函数 3.4 显示字符函数 3.5 显示字符串函数 3.6 显示图片函数 附录 驱动代码文件 oled.c oled.h f6x8.h 1.1 OLED 有机发

    2024年02月02日
    浏览(28)
  • Clion中使用C/C++开发stm32程序

    前言         从刚开始学习阶段,一直是用的keil5开发stm32程序,自从看到稚晖君推荐的CLion开发嵌入式程序后,这次尝试在CLion上开发stm32程序。 1、配置CLion用于STM32开发的环境         这里我就不详细写了,没必要重新写,网上教程很多,这里我主要参考的是稚晖君的文

    2024年02月05日
    浏览(38)
  • 从零开始教你使用Clion优雅开发STM32(三)Clion嵌入式开发必备插件

    (一)软件安装与环境配置 (二)移植工程文件到其他芯片 (三)Clion嵌入式开发必备插件 文章目录 前言 1)Chinese(simplified) 2)CodeGlance Pro 3)File Watchers  4)Key Promoter X 5)CodeGlance Pro 6)Monokai Pro Theme 7)Rainbow Brackets Lite 8)Serial Port  Monitor 总结 前段时间,稚晖君用 Cl

    2024年02月06日
    浏览(51)
  • STM32配合cubeMX硬件I2C驱动0.96寸OLED

    目录 一、简单介绍 1.1   OLED 1.2   I2C协议 二、实战 2.1 工程配置 2.2 测试工程 2.3 波形分析 三、驱动OLED 3.1 初始化代码 3.2 清屏函数 3.3 设置坐标函数 3.4 显示字符函数 3.5 显示字符串函数 3.6 显示图片函数 附录 驱动代码文件 oled.c oled.h f6x8.h 有机发光二极管 (英语:Organic

    2024年02月08日
    浏览(52)
  • STM32开发 | Clion搭建STM32开发环境

    做嵌入式开发的人对STM32这个平台应该都是非常熟悉的,在国内尤其流行,很多产品里面都是基于这个平台做的方案。多数人在开发STM32的时候用的都是 Keil 这个老牌IDE,很大一部分原因是因为大多数人最初是从51单片机学习过来的,51就是基于Keil去开发的,然后迁移到STM32的

    2023年04月12日
    浏览(43)
  • STM32开发(2)----CubeMX的安装和使用

    本章对STM32CubeMX的安装和使用做简单介绍 STM32CubeMX是一种图形化工具,它允许非常简单地配置STM32微控制器和微处理器,并通过逐步过程为Arm®Cortex®-M内核生成相应的初始化C代码,或为Arm™Cortex®-a内核生成部分Linux®设备树。 STM32CubeMX 具有如下特性: ① 直观的选择 MCU 型号,

    2024年02月16日
    浏览(35)
  • STM32+Clion多线程开发

    目录 创建多线程 freertos.c main.cpp main_app.h 二值信号量 相关API介绍 (1) osSemaphoreCreate (2)osSemaphoreDelete (3)osSemaphoreRelease (4)osSemaphoreWait 实际使用 创建信号量(freertos.c) 在头文件中外部引用(freertos_inc.h) main.c 关于clion使用printf,参考【教程】手把手教你用Clion进行STM32开

    2024年03月15日
    浏览(41)
  • 尝试使用CubeMX做stm32开发之十:ADC配置

            参考《STM32中文参考手册_V10》,研究CubeMX中有关ADC的配置。 ADC1 Mode and Configuration:         IN0~IN9:10路12位ADC采样通道,外部模拟量信号输入         Temperature Sensor Channel:MCU内置温度传感器采样通道,用来测量器件周围的温度。在MCU内部与ADC1_IN16通道相连

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包