【STM32开发笔记】搭建VSCode+PyOCD的STM32开发环境

【STM32开发笔记】搭建VSCode+PyOCD的STM32开发环境

    • 一、安装软件
      • 1.1 安装STM32CubeMX
      • 1.2 安装VSCode
      • 1.3 安装Arm GNU Toolchain
      • 1.4 安装Make for Windows
      • 1.5 安装Python
      • 1.6 安装PyOCD
    • 二、安装插件
      • 2.1 VSCode插件
      • 2.2 PyOCD支持包
    • 三、创建项目
      • 3.1 创建STM32CubeMX项目
      • 3.2 查阅原理图
      • 3.3 修改引脚功能
      • 3.4 生成Makefile项目
    • 四、编辑/编译/下载/调试
      • 4.1 修改代码
      • 4.2 编译代码
      • 4.3 下载固件
      • 4.4 调试设置
      • 4.5 断点调试
    • 五、参考链接

本文将介绍如何在Windows系统上搭建基于VSCode和PyOCD的开发环境,具体包括如下软件:

  • STM32CubeMX,用于修改配置,以及生成代码;
  • VSCode,用于编辑源代码文件;
  • Arm GNU Toolchain,用于源代码编译为目标文件;
  • Make for Windows,用于根据Makefile调用编译命令;
  • Python,PyOCD依赖Python,需要先安装;
  • PyOCD,用于固件下载,以及gdb调试;

标题为了简短只写了VSCode和PyOCD,实际上需要使用以上六个软件。

本文部分章节以STM32U083RC为例,由于PyOCD可以支持的MCU类型非常多;因此该方法不仅仅只适用于这一款MCU,而是适用于所有STM32的MCU(凡是PyOCD命令能够找到支持包的CMU均可以支持)。由于VSCode和PyOCD等软件都是跨平台的,因此本文介绍的方法同样适用于Linux系统和MacOS系统,仅需少量步骤调整。

一、安装软件

接下来介绍如何安装上述六个软件,如果部分软件你已经安装了,则可以跳过相关介绍。

1.1 安装STM32CubeMX

下载页面: https://www.st.com.cn/zh/development-tools/stm32cubemx.html

ST官网需要注册之后,才能下载。

1.2 安装VSCode

下载页面: https://code.visualstudio.com/Download

VSCode可以直接下载,不需要注册。

1.3 安装Arm GNU Toolchain

Arm GNU Toolchain 10.3-2021.10版本下载页面:https://developer.arm.com/downloads/-/gnu-rm

最新的版(13.3)下载页面: https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

10.3 或者 13.3 都可以,实测发现10.3生成的代码体积稍微小一点点,都可以运行。

下载exe或者zip解压都可以,需要注意的是:

  • exe安装过程中需要勾选添加到PATH环境变量;
  • zip解压后,需要手动将arm-none-eabi-gcc.exe所在目录添加到PATH环境变量;

安装完成后,打开新的cmd窗口,执行如下命令:

arm-none-eabi-gcc --version

命令输出类似如下版本信息,即表示PATH环境变量配置成功:

Untitled

1.4 安装Make for Windows

Make for Windows下载页面:https://gnuwin32.sourceforge.net/packages/make.htm

安装完成后,需要手动将make.exe所在目录,添加到PATH环境变量。

类似的,添加成功后,新打开cmd窗口,可以执行如下命令:

make --version

命令输出类似如下版本信息,即表示PATH环境变量配置成功:

Untitled

1.5 安装Python

Python下载页面: https://www.python.org/downloads/

安装过程中记得勾选:Add Python to environment variables

Untitled

安装完成后,可以执行如下命令测试是否正常加入环境变量:

Untitled

成功输出版本信息,即表示PATH环境变量配置成功。

设置pip镜像站:

pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
pip config set global.trusted-host mirrors.ustc.edu.cn
pip config set global.timeout 120

1.6 安装PyOCD

打开cmd窗口,执行如下命令,安装PyOCD:

pip install pyocd

安装过程输出如下:

Untitled

安装完成后,执行pyocd命令:

Untitled

输出了PyOCD具体使用方法,即表示安装成功。

二、安装插件

2.1 VSCode插件

VSCode需要安装的插件:

  • C/C++ Extension Pack,用于支持C/C++语法高亮、代码提示;
  • Cortex-Debug,用于支持Arm Cortex-M内核MCU的调试;
  • Makefile Tools,用于支持Makefile语法高亮、执行构建;

在VSCode的插件栏搜索即可安装,没啥难度。

2.2 PyOCD支持包

PyOCD需要安装STM32U0xx支持包,才能进行STM32U083调试,具体过程如下。

首先,搜索STM32U08RC:

Untitled

接着,安装STM32U0xx支持包:

Untitled

安装成功后,将开发板通过USB线与PC连接,运行pyocd list命令:

Untitled

如果没有问题,则可以显示设备。

三、创建项目

3.1 创建STM32CubeMX项目

  1. 打开STM32CubeMX之后,通过菜单File→New Project开始创建项目,在弹出的界面中:

Untitled

  • 在Commercial Part Number栏中输入STM32U083RC;
  • 在MCUs/MPUs List下方选中STM32U083RCTx;
  • 点击右上角Start Project按钮;
  1. 默认使用的是内部16MHz HSI作为时钟源,可以不用修改:

Untitled

3.2 查阅原理图

NUCLEO-U083RC开发板原理图下载链接:https://www.st.com.cn/resource/en/schematic_pack/mb1932-u083rc-b01-schematic.pdf

查阅开发板原理图文件,找到LED的部分:

Untitled

可以看到,PA5可以控制LED的亮灭。

3.3 修改引脚功能

  1. 在Pinout View中找到PA5,并将其功能设置为GPIO_Output,如下图所示:

Untitled

  1. 按Ctrl+S保存,选中合适的文件夹路径进行保存,例如我选中的E:\DIY\STM32U083\LedBlink。

3.4 生成Makefile项目

  1. 切换到Project Manager标签页,选择Toolchain/IDE选择 Makefile,如下图所示:

Untitled

  1. Code Generator部分,选中Generate peripheral initialization as a pair of ‘.c/.h’ per peripheral,如下图:

Untitled

  1. 点击右上角的Gnerate Code开始生成代码,生成完成后弹窗如下:

Untitled

  1. 点击Open Folder打开目录,可以看到生成的文件内容如下:

Untitled

四、编辑/编译/下载/调试

4.1 修改代码

修改main.c代码,将在开头的USER CODE BEGIN Includes代码段改为:

Untitled

将main函数的循环修改为:

Untitled

4.2 编译代码

VSCode打开文件夹之后,点击Makefile插件的“生成文件”按钮,开始执行make命令:

Untitled

命令执行的最后,可以看到RAM和Flash占用数据的输出:

Untitled

4.3 下载固件

使用如下命令,将编译的固件下载到开发板上:

pyocd flash -t STM32U083RCTx -f 1000000 build\LedBlink.bin

命令执行过程中会输出进度条:

Untitled

执行完成后,会输出下载速度。

4.4 调试设置

如下图所示,依次点击调试按钮,创建luanch.json,Cortex Debug:

Untitled

则会创建一个新的lunch.json文件:

Untitled

修改executable、serverType,并添加targetId属性:

Untitled

保存,到这里调试配置就设置完成了。

4.5 断点调试

打开main.c,在循环中打下断点:

Untitled

此时,按F5键,或者点击Debug标签页上的调试按钮:

Untitled

就可以开始调试了。

默认的断点是main函数:

Untitled

直接F5继续,则可以运行到刚刚打下的断点处:

Untitled

好了,一切正常,可以顺利的进行开发了。

五、参考链接

  1. STM32CubeMX下载页面: https://www.st.com.cn/zh/development-tools/stm32cubemx.html
  2. VSCode下载页面: https://code.visualstudio.com/Download
  3. Arm GNU Toolchain 10.3下载页面: https://developer.arm.com/downloads/-/gnu-rm
  4. Arm GNU Toolchian 最新13.3下载页面: https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
  5. Make for Windows下载页面:https://gnuwin32.sourceforge.net/packages/make.htm
  6. Python下载页面: https://www.python.org/downloads/
  7. PyOCD主页:https://pyocd.io/
  8. NUCELO-U083RC开发板介绍页面: https://www.st.com.cn/zh/evaluation-tools/nucleo-u083rc.html
  9. NUCELO-U083RC开发板原理图: https://www.st.com.cn/resource/en/schematic_pack/mb1932-u083rc-b01-schematic.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring常见问题一:IOC和DI

IOC和DI IOC和DI之间到底是什么关系? 什么是依赖关系?依赖关系会带来什么问题?Spring是怎么来支持依赖注入的? 引言 在现代软件开发中,面向对象编程(OOP)已经成为主流编程范式。然而&#xff0…

口袋算法的示例

原理 口袋算法是感知器(Perceptron)算法的一种改进。感知器算法是一种线性分类算法,但在训练数据不是线性可分的情况下,它可能无法收敛,即无法找到一个线性分类器来正确分类所有的训练样本。为了解决这个问题,口袋算法引入了一个"口袋"(Pocket),用来存储迄…

java.io.RandomAccessFile 介绍

java.io.RandomAccessFile 是 Java 标准库中提供的一个类,允许对文件进行随机访问读写操作。与 FileInputStream 和 FileOutputStream 不同,RandomAccessFile 可以读取和写入同一个文件,并且可以在文件的任意位置进行读写操作。它既可以作为输…

【Java】字符与字符串

文章目录 1.字符char1.1 编码1.2 转义字符1.3 char的类型转换1.4 字符的比较1.5 Character类 2.String类型2.1 String对象常用的方法:2.2 从控制台读取字符串2.3 从控制台读取字符2.4 字符串的比较2.5 子串和字符2.6 字符串的转化2.7 格式化控制台输出 1.字符char …

IOT 可编程控制系统

IOT(物联网)可编程控制系统,如GF-MAXCC等,是一种集成了多种先进技术和功能的智能化控制设备,它能够在物联网系统中发挥关键作用,实现对多种设备的集中管理和控制。具体来说,IOT可编程控制系统的…

PyTorch构建一个肺部CT图像分类模型来分辨肺癌

当你有5万个标注的肺部CT DICOM图像数据,并且希望使用PyTorch构建一个肺部CT图像分类模型来分辨肺癌,以下是详细的步骤和示例代码: 数据准备 首先,确保你的数据集被正确分为训练集、验证集和测试集,并且每个图像都有相…

找到并留住最佳员工

找到并留住最佳员工 每个月我都会接到许多猎头的电话,有些猎头比较专业,但绝大多数在我看来与猎头二字还是有很大差距的。 与猎头接触多了,自然也了解了他们的工作,包括操作手法,总体上国内的猎头行业还处在初级阶段。 总结就是“盲目推荐,以量取胜”。 目前现状 许多…

【算法专题】双指针算法之 1089.复写零(力扣)

欢迎来到 CILMY23的博客 🏆本篇主题为:双指针算法之 1089.复写零(力扣) 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算…

2024版彩虹晴天全能知识付费源码+虚拟商城解决方案 含一键搭建视频教程 无授权限制

是一款知识付费平台的核心,更是集虚拟商城、实物交易、代理分销于一体的全能解决方案。 核心亮点: 最新源码,独家首发:经过精心修复与更新,本源码由我们团队亲自把关,确保您获得的是市场上最新鲜、最稳定…

DBA 数据库管理 表管理 数据批量处理。表头约束

表管理 建库 库名命名规则:仅可以使用数字、字母、下划线、不能纯数字 不可使用MySQL命令或特殊字符 库名区分字母大小写 加if not exists 命令避免重名报错 create database if not exists gamedb; 建表 drop database if exists gamedb ; 删表…

常用软件的docker compose安装

简介 Docker Compose 是 Docker 的一个工具,用于定义和管理多容器 Docker 应用。通过使用一个单独的 YAML 文件,您可以定义应用所需的所有服务,然后使用一个简单的命令来启动和运行这些服务。Docker Compose 非常适合于微服务架构或任何需要…

【论文阅读】LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING?

LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING? https://openreview.net/forum?idwxClzZdjqP 图对比学习的重点就是图数据的增强,针对图中节点的表示或者图的结构进行扰动,通过对比学习得到对应的节点表示,以便于…

Kafka基础入门-代码实操

Kafka是基于发布/订阅模式的消息队列,消息的生产和消费都需要指定主题,因此,我们想要实现消息的传递,第一步必选是创建一个主题(Topic)。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。…

【Linux 配置静态IP】Ubuntu20.04

最近学习网络编程,为了方便学习需要Ubuntu配置静态IP,网上看了好多贴子跟着试了下可以实现,但重启虚拟机后有时就无法连接,总之各种各样问题;相关的配置方法也比较凌乱,有用netplan 或者 ifupdown ,笔者简单…

数据库崩溃时事务的恢复机制

在数据库管理系统中,确保数据的一致性和完整性是至关重要的。特别是在面对系统崩溃或意外中断时,如何有效地恢复事务状态成为了一个关键问题。MySQL的InnoDB存储引擎通过引入REDO日志和UNDO日志机制,巧妙地解决了这一问题,确保了事…

C++知识点:C和C++(自用)

C和C 1.类和结构体的关系:2.面向对象和面向过程3.头文件和标准命名空间4.cin和cout5. const在C中和C中的区别6.const全局作用域7 new和delete8 内联函数9 函数重载10. 函数重载的匹配 引用: [1]C语言中文网 1.类和结构体的关系: 类是结构体的…

Linux bash: yum-config-manager: command not found的解决方法

yum-config-manager简介 Linux yum-config-manager 是一个用于管理 YUM 仓库配置的工具,它允许用户启用、禁用、添加或删除 YUM 仓库。这个命令在基于 Red Hat 的系统中广泛使用,比如 CentOS 和 Fedora。 可能原因 用户可能未安装 yum-utils 包&#…

Qt文件下载工具

在Qt中实现文件下载功能,通常可以通过多种方式来完成,包括使用 QNetworkAccessManager 和 QNetworkReply 类,或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法: 方法1:使用 QNetworkAccessManager 和…

pxe高效网络批量装机

文章目录 一, PXE远程安装服务(一)三种系统装机的方式(二)linux装机1. 加载 Boot Loader2. 加载启动安装菜单3. 加载内核和 initrd4. 加载根文件系统5. 运行 Anaconda 安装向导 (三)实现过程&am…

【ROS2】测试

为什么要进行自动化测试? 以下是我们应该进行自动化测试的许多重要原因之一: 您可以更快地对代码进行增量更新。ROS 有数百个包,具有许多相互依赖关系,因此很难预见一个小变化可能引起的问题。如果您的更改通过了单元测试&#xf…