Ubuntu上使用CLion开发STM32,并使用JLink下载、调试

2023-05-16

目录

  • 一、环境准备
  • 二、下载STM32CubeMX固件库
  • 三、使用STM32CubeMX创建工程
  • 四、CLion配置
  • 五、CMake简单操作和添加DSP库
    • CMake简单操作
    • 添加DSP库
  • 五、调试时查看外设寄存器。
  • 六、使用JLinkGDBServer进行调试
  • 七、总结

下文提到的资源链接

一、环境准备

需要准备的软件有arm-none-eabi-gcc编译器,CLion,STM32CubeMX,OpenOCD
还有可选的JLink驱动套件

  • arm-none-eabi-gcc编译器可以再其官网下载。
    下载之后解压,在/etc/profile中设置PATH环境变量即可
  • CLion也是官网下载,但是这里不讲破解。
  • JLink还是官网下载对应操作系统的安装包。
  • OpenOCD可以通过apt安装。sudo apt install openocd
  • STM32CubeMX依然是通过官网下载。要注意的是STM32CubeMX是基于Java的软件,所以需要先安装Java,使用apt安装默认版本即可sudo apt install default-jre,运行其中的SetupSTM32CubeMX-****.linux按照图形界面安装即可,操作与Windows大同小异,就是不会自动创建桌面图标

二、下载STM32CubeMX固件库

安装好STM32CubeMX之后第一次启动需要设置固件库的路径并下载固件库。
STM32CubeMX主界面
点击右侧第二个按键INSTALL/REMOVE打开固件库列表
Embedded Software Package Manger
勾选需要的固件库下载安装。我已经装过了。(这个仅需设置一次)

三、使用STM32CubeMX创建工程

安装完成后回到主界面,点击中间深蓝色框内的第一个按键ACCESS TO MCU SELECTOR打开MCU列表,如果出现一个进度条没完没了可以直接关闭,不影响。
在这里插入图片描述
选择MCU,通过左侧上方的搜索框可以快速找到需要的MCU,我使用STM32F103C8T6为例。
双击列表的那一栏选择。
在这里插入图片描述
设置PC13引脚为输出,来一个点灯,RCC中的外部高速时钟为图片中的,SYS的debug为Serial Wire。
其他的都可以不设置,SYS的debug是一定一定要设置的,否则下一次下载程序的时候会因为调试接口关闭无法下载,如果还是忘记了可以在下载开始的一瞬间按下复位键手动复位,时机自己摸索去吧,多试几次就能成功,问题不大。
在这里插入图片描述
转到第二个选项卡,时钟设置直接把HCLK输入最高的72M然后回车让它自动设置。
在这里插入图片描述
给自己的工程起个名字,选择一个路径,Toolchain/IDE选择SW4STM32,这是CLion能够解析的。
在这里插入图片描述
转到左侧第二个选项卡,的第二个框的第一个选项,这个选项能把每一个外设的初始化代码分别写在独立的.c/.h文件里,更加整洁。
Cube的配置到此结束,点击右上角的GENTER CODE来生成你的工程。完事后直接关掉弹窗

四、CLion配置

打开CLion。
在这里插入图片描述
CLion打开,找到工程文件夹里的ioc文件然后作为一个工程打开。
在这里插入图片描述
打开CLion的设置,找到Build,Execute,Deployment->Embedded Development选项,填入OpenOCD的路径和Cube的路径并测试,如果是apt安装的openocd路径应该是一样的,Cube自己找,完成后保存。(这个仅需设置一次)
在这里插入图片描述
还是Build,Execute,Deployment,找到第一个Toolchain选项,点击加号选择System新建一个工具链,按照arm-none-eabi-gcc编译器的路径分别找到bin/arm-none-eabi-gccbin/arm-none-eabi-g++bin/arm-none-eabi-gdb作为C编译器,C++编译器,调试器。CMake和make自动就好。(这个仅需设置一次)
在这里插入图片描述
转到Toolchain下方的CMake选项卡,把右侧焦点的工具链选项设置为刚刚新建的工具链到此,工程的编译工具就设置完了。
回到CLion主界面,CMake已经自动运行一次了配置成功了。
在这里插入图片描述
右上角的生成目标选择***.elf然后点击旁边的锤子进行编译,可以看见已经编译成功了。
自己在Src/main.c的主循环里写两行点灯代码再编译一遍。

  /* USER CODE BEGIN WHILE */
  while (1)
  {
      HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
      HAL_Delay(300);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

一定要写在 USER CODE BEGIN 注释和USER CODE END注释之间,否则Cube重新生成的时候会抹掉。
在这里插入图片描述
右上角的生成目标打开第一个配置选项,第一行的Target点击,选中****.elf然后第二行的也自动配置了。
找到配置的第三行Board config file,点最后面的Assist。在弹窗中随便找一个,然后点击下方中间的Copy to Project & Use复制到自己的工程里,然后把原文删掉,替换成如下的。

interface jlink		                                   #使用JLink
transport select swd                             #SWD接口
source [find target/stm32f1x.cfg]    #stm32f1x的配置文件

如果嫌麻烦的可以找到模板的目录,把自己改好重命名的放进去,这样就可以直接选择不用改动了。
三行改完之后看见最下面的error消失了,OK关闭。
现在就可以点击运行箭头进行程序下载或者debug了。

五、CMake简单操作和添加DSP库

CMake简单操作

在CMakeLists_template.txt的40、42、44行分别是添加全局宏定义,添加源文件,添加include路径的位置,不要更改原来的的,往里填自己的文件就行了,在源文件使用的file函数中也可以使用*.c这样的通配符,宏定义要在前面加-D,就像-DUSE_HAL_DRIVER,中间没有空格,添加完后在Project栏中对ioc文件右键,选择Update CMake Project with STM32CubeMX来更新CMake。CMake就配置成功了。这样就能实现基本的添加文件和宏的操作了。

添加DSP库

Cube不自动生成DSP库的文件,需要自己添加,可以在Keil的CMSIS库中找到也可以直接在我这里下载。
复制DSP文件夹到工程根目录里,然后在CMakeLists_template.txt第44行的include_directories和add_executable之间插入下面四行,重新生成CMakeLists.txt编译就可以了。

#DSP
add_definitions(-DARM_MATH_CM3 -DARM_MATH_MATRIX_CHECK -DARM_MATH_ROUNDING)
include_directories("DSP/Include")
link_directories(DSP/Lib/GCC)
link_libraries(libarm_cortexM3l_math.a)

这个是F1的,没有FPU,如果是F4的有FPU的话在22,23行有注释Uncomment for hardware floating point
取消注释就能启用FPU,库libarm_cortexM3l_math.a也要换成对应的,然后自己添加的add_definitions就和他的重复了可以注释掉了,关于F7,H7那种有双精度FPU的没有试过,应该还要改FPU_FLAGS的内容。

五、调试时查看外设寄存器。

在这里插入图片描述
在OCD调试控制台的第三个选项卡有一个Peripherals选项,显示它需要对应芯片的svd文件,在我的wj中有SVD文件夹,里面有F1和F4的芯片的svd文件选择对应的复制到工程里然后Load,弹出的外设选择需要的,不嫌乱就全选,反正还可以点击旁边的小漏斗再筛选。
在这里插入图片描述
最终的效果就是这样的,CLion不像Keil,它不能事实更新观察变量或者寄存器的值,只有出现暂停的时候才能刷新,除了配置麻烦点这是唯一的不足,但是看在CLion其他优秀的功能上可以忍(手动滑稽)。
在这里插入图片描述

六、使用JLinkGDBServer进行调试

在这里插入图片描述
还是选择目标的下拉框,配置,添加一个Embedded GDB Server,如图配置一下就可以用了,实际上使用效果不如OpenOCD。
JLinkGDBServer的GDB端口默认是2331,-device后面的是芯片名字,剩下的照抄就行。

localhost:2331
/usr/bin/JLinkGDBServer
-select USB -device STM32F103C8 -if SWD -speed 4000 -noir

七、总结

Linux上使用CLion开发STM32应该是最好的选择了,win上面OpenOCD的驱动问题实在恶心,JLinkGDBserver只能调试又不能下载程序。所以CLion还是再Linux上好使。JLinkGDBServer因为我是JLinkOB,JLink驱动版本过高没有办法用,如果是V9或者更高的是完全没有问题的,JLink驱动套件中还是有很多强大的工具的,所以带上它了。CLion一些“过分细心”的错误提示高亮在设置里面关一关就行,总体是使用体验还是不错的,这样在Linux下开发单片机和其他Linux程序就不用频繁切换系统了,还不错的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu上使用CLion开发STM32,并使用JLink下载、调试 的相关文章

  • CAN总线通信协议详讲

    CAN简介 CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986 年率先提出 此后 xff0c CAN 通过IS
  • gazebo仿真——controller配置(transmission/hardwareInterface标签)

    参考roswiki controller官方说明 本文作为古月大神的补充ROS探索总结 xff08 三十一 xff09 ros control 为了在gazebo中实现机器人关节的控制 xff0c 需要求建立一个controller控制器
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • postman插件下载安装教程(详细)

    一 前言 postman是一款强大网页接口调试工具 xff0c 我们在平时开发过程中经常会使用到 xff0c 一般使用最多的是postman的客户端 xff0c 实际上postman在谷歌浏览器上也提供了插件 xff0c 可以不必要安装客户
  • CMake交叉编译简单教程

    首先要安装cmaek 然后安装交叉编译链 一 CMake简介 xff1a CMake是一个跨平台的安装 编译 工具 可以通过简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的 makefile 或者 project 文件 二 C
  • 锂电池的常见接口

    我们在做一些小型化便携式设备的时候 xff0c 经常会用到锂电池 xff0c 常见的锂电池接口如图 xff1a
  • Ubuntu14.04_ROS学习笔记(7) odroid板上操作系统和电脑端主从连接

    4 29日 xff0c 距离上次写过于odroid ROS的博客已经过去近4周 xff0c 在这四周发生了很多曲折事 xff0c 研究生的调剂和面试问题 xff0c 导师双向选择也出现了问题 xff0c 调档问题 xff0c 然后和GF出去
  • ROS学习----Publisher与Subscriber

    1 Publisher 发布者 与subscriber 订阅者 关系 Publisher的主要作用是对于指定话题发布特定数据类型的消息 下面是利用代码实现一个节点 xff0c 节点创建一个Publisher并发布字符串 Hello worl
  • liunx 下如何查看make与cmake版本

    cmake cmake version 即可查看cmake的版本 make 如果是在 shell 中查看 xff0c 那么直接 make v 即可 如果是在 makefile 中获取 xff0c 则用 MAKE VERSION xff0c
  • CAN协议解析

    CAN协议解析 CAN 总线组网连线图CAN的报文格式报文格式扩展CAN错误检测 波形解析ID数据长度数据字段CRC CAN 总线组网连线图 根据CAN总线的硬件特性 xff0c 当一条CAN总线上挂接多个驱动器的时候 xff0c 应当按照
  • 字节序的大端和小端

    字节序 字节序 xff08 Byte Order xff09 是指在多字节的数据类型 xff08 如整型 浮点型等 xff09 在内存中存储时 xff0c 字节的排列顺序 大端字节序 xff08 Big Endian xff09 xff1a
  • STM32 HAL 串口收发(无DMA,中断接收)

    STM32CUBE配置 一 使用printf发送数据 xff0c 在usart c中添加代码串口重定向 USER CODE BEGIN 0 include lt stdio h gt ifdef GNUC define PUTCHAR PR
  • 2019年电赛综合测评题详解

    2019年全国大学生电子设计竞赛综合测评已经结束 xff0c 邀请到西电研究生李天红同学给大家做重点分析 首先看题目 xff1a 视频要点提示 xff1a 题目分析 常用波形变换电路 两种可行方案 方案仿真 实际过程中遇到的问题分析 完整视
  • 《Spring源码深度解析 郝佳 第2版》SpringBoot体系分析、Starter的原理

    往期博客 Spring源码深度解析 郝佳 第2版 容器的基本实现与XML文件的加载 Spring源码深度解析 郝佳 第2版 XML标签的解析 Spring源码深度解析 郝佳 第2版 bean的加载 循环依赖的解决 Spring源码深度解析
  • SpringCloud Alibaba Nacos实践与原理分析

    目录 一 Nacos概述 Nacos是什么 xff1f Nacos中的相关概念 二 微服务的注册与发现 Nacos client提供注册接口的原理 服务注册的原理分析服务注册的时机分析NacosServiceRegistryAutoConf
  • Linux课堂篇3_Linux目录结构、快捷键、常用基础命令

    目录 此系列博客为大三下期末小学期课程大数据疫情分析平台项目学习学习笔记 xff0c 内容参考中共教育讲义文件 Linux目录结构Linux快捷键Linux命令 命令分类快捷键基本命令常用命令用户管理命令文件权限命令磁盘大小查看命令搜索查找
  • 《深入理解RPC框架原理与实现 华钟明》读书笔记

    前言 这本书更像是全面系统的讲解RPC xff0c 内容可以连贯起来 xff0c 从计算机处理器发展到RPC的诞生 xff0c 后面讲几种常见的RPC组件 通信协议 序列化协议 xff0c 虽然内容不是很深入 xff0c 但是对于小白较易理
  • Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

    目录 一 基础概念 图数据库的概念适用场景数据模型路径点的VID架构 二 初步使用 Windows安装Nebula Graph服务Nebula Console 连接 Nebula Graph常用命令 3 1异步实现创建修改类型 xff08
  • 报错8_引入Sl4j-log4j12报错 Class path contains multiple SLF4J bindings.

    报错 SpringBoot版本2 6 7 xff0c pom文件 span class token prolog lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt span spa
  • Kubernetes学习篇1_集群环境搭建测试

    目录 一 集群环境准备 集群环境安装要求虚拟机服务器网络IP配置主机名解析其他配置 二 集群初始化 需要提前准备集群所需组件镜像kubernetes初始化集群 需要在master上面执行的操作需要在node1 node2执行的命令需要在ma

随机推荐