【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

news2024/11/5 14:45:03

STM32-FOC(1)STM32 电机控制的软件开发环境
STM32-FOC(2)STM32 导入和创建项目
STM32-FOC(3)STM32 互补 PWM 输出
STM32-FOC(4)IHM03 电机控制套件介绍
STM32-FOC(5)IHM03 套件无感FOC 控制

【动手学电机驱动】STM32-FOC(2)STM32G4 导入和创建项目

    • 1. 使用 CubeIDE 导入 LED 闪灯例程
    • 2. 使用 CubeMX 导入和生成 LED 闪灯程序
    • 3. 使用 CubeMX 创建和编写 LED 闪灯程序

本节内容:
本节通过 NUCLEO-G431RB 开发板, 以 LED 点灯实验为例,介绍 STM32G4 的编程和调试。这是 STM32G4 学习的第一个实验。

  • 以 LED 点灯实验为例,学习使用 STM32CubeIDE 开发工具导入项目,编译、烧录和运行程序。
  • 以 LED 点灯实验为例,学习使用 STM32CubeMX 开发工具创建、配置新项目,导入例程生成代码,编译与调试程序。
  • 以 LED 点灯实验为例,学习使用 STM32CubeMX 开发工具创建、配置新项目,编写程序代码,编译与调试程序。

实验条件:
① 硬件平台:NUCLEO-G431RB 开发板
② 软件平台:STM32CubeMX, STM32CubeIDE


1. 使用 CubeIDE 导入 LED 闪灯例程

导入已有的例程项目,以LED 闪灯程序(GPIO_IOToggle 项目)为例,具体操作步骤如下:

  1. 打开 STM32CubeIDE。

  2. 打开已有的例程项目 GPIO_IOToggle。
    在这里插入图片描述
    选择 Import STM32Cube example 导入 STM32Cube 例程:

  • 弹出 STM32 Project from STM32Cube examples 窗口;
  • 在例程选择器(Example Selector)-- 开发板选择(Board)选择使用的 MCU开发板为 “NUCLEO-G431RB” ;
  • 在例程列表(Examples List)中选择 GPIO_IOToggle,如下图所示。
  • 点击 “Next” 导入例程,在 “CubeFW G4 License Agreement” 时要选择接受版权协议。
  1. 打开例程文件 main.c。
    导入 GPIO_IOToggle 项目后,自动转换到 STM32CubeIDE 的主界面
    从 Application - User 目录下打开程序文件 main.c,如下图所示。
    在这里插入图片描述

  2. 打开例程文件 main.c。

轮询程序 while(1) 的代码如下,通过延时 100ms 翻转 LED2_PIN,来实现 LED2 以 100ms 进行闪烁。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
  }
  /* USER CODE END 3 */
  1. 点击工具栏中 “Build Debug” 按键对程序代码进行编译。

在这里插入图片描述

  1. 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。

  2. 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。

在这里插入图片描述

  1. 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。NUCLEO-G431RB 开发板上的 LD2 指示灯以 100ms 开始闪烁。

在这里插入图片描述

  1. 修改延时时间,重新编译、烧录和运行程序。

将轮询程序 while(1) 中的延时时间修改为 1000ms,来实现 LED2 以 1s 进行闪烁。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 1000 ms */
    HAL_Delay(1000);
  }
  /* USER CODE END 3 */

程序烧录后,点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。此时 NUCLEO-G431RB 开发板上的 LD2 指示灯以 1000ms 开始闪烁。

  1. 关闭项目,关闭 STM32CubeIDE 。

  2. NUCLEO-G431RB 开发板重新上电(只要用 USB 为开发板供电即可,并不需要连接 PC)。按下黑色按键 B2,MCU 重启(Reset),开发板上的 LD2 指示灯以 1000ms 开始闪烁。


2. 使用 CubeMX 导入和生成 LED 闪灯程序

用户创建新的项目,以 创建 LED 闪灯程序项目为例,具体操作步骤如下:

  1. 打开 STM32CubeMX。

  2. 选择 New Project(或Ctrl-N快捷键)新建工程,进入 New Project 界面。

  • 选择MCU为 STM32G431RBT6(参考开发板的 MCU 型号选择)。

在这里插入图片描述

  • 选择开发板为 NUCLEO-G431RB 开发板。

在这里插入图片描述

  • 如果要直接导入STM32Cube 例程,可以继续从 Example Selector 选择所需的例程,然后点击 “Start Project” 建立项目。

在这里插入图片描述

  1. 点击 “Start Project” 建立项目。弹出项目信息确认窗口如下,点击 “Install” 安装选择的例程项目。

在这里插入图片描述

  1. 例程项目安装完成后,自动转入 CubeMX 的 Pinout Configuration 视图。
    如下图所示,在右下角的搜索栏中搜索 PA5 管脚,将其设置为 GPIO_Output。

在这里插入图片描述

  1. 代码生成。
    点击菜单 “Project Manager” 按钮,进入工程配置界面,如下图所示。

在这里插入图片描述

  • 输入项目名称,选择项目的保存路径。
  • 将Toolchain / IDE 设定为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)
  • 点击右上角 “GENERATE CODE” 生成代码
  • 加载完毕后,弹出代码生成提示窗口,点击“ OPEN PROJECT”,进入 STM32CubeIDE。
    在这里插入图片描述
  1. 在 STM32CubeIDE 打开例程文件 main.c。
    代码生成后,已经自动进入 STM32CubeIDE,并打开 GPIO_IOToggle 项目。注意这个 GPIO_IOToggle 项目,不是系统提供的例程项目,而是我们刚刚创建新项目,其文件目录结构也与上节例程项目不同。但本项目中的程序内容仍是从例程项目下载安装的,详见前文 “继续从 Example Selector 选择所需的例程”。
    从 Scr 目录打开程序文件 main.c,如下图所示。
    在这里插入图片描述

  2. 打开例程文件 main.c。

轮询程序 while(1) 的代码如下,通过延时 100ms 翻转 LED2_PIN,来实现 LED2 以 100ms 进行闪烁。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);

  }
  /* USER CODE END 3 */
  1. 程序编辑、编译与调试
  • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
  • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
  • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。NUCLEO-G431RB 开发板上的 LD2 指示灯以 100ms 开始闪烁。
  1. 修改延时时间,重新编译、烧录和运行程序。

将轮询程序 while(1) 中的延时时间修改为 1000ms,来实现 LED2 以 1s 进行闪烁。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 1000 ms */
    HAL_Delay(1000);

  }

程序烧录后,点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。此时 NUCLEO-G431RB 开发板上的 LD2 指示灯以 1000ms 开始闪烁。

  1. 关闭项目,关闭 STM32CubeIDE 。

  2. NUCLEO-G431RB 开发板重新上电(只要用 USB 为开发板供电即可,并不需要连接 PC)。按下黑色按键 B2,MCU 重启(Reset),开发板上的 LD2 指示灯以 1000ms 开始闪烁。


3. 使用 CubeMX 创建和编写 LED 闪灯程序

使用 CubeMX 创建和编写 LED 闪灯程序,前面的步骤与 上节 “使用 CubeMX导入LED 闪灯程序” 相同,但在新建工程时,只选择MCU 型号和开发板型号,不从 Example Selector 选择例程,而是自行编写相关的程序内容。

仍以 创建 LED 闪灯程序项目为例,具体操作步骤如下:

  1. 打开 STM32CubeMX。

  2. 选择 New Project(或Ctrl-N快捷键)新建工程,进入 New Project 界面。

  • 选择MCU为 STM32G431RBT6(参考开发板的 MCU 型号选择)。
  • 选择开发板为 NUCLEO-G431RB 开发板。

本节不从 Example Selector 选择例程,而是在选择 MCU 和 开发板后直接点击 “Start Project” 建立项目。弹出项目选项窗口,勾选 “Generate demonstration code”,如下图所示。

在这里插入图片描述

  1. 自动转入 CubeMX 的 Pinout Configuration 视图,如下图所示。
    在这里插入图片描述
    在右下角的搜索栏中搜索 PA5 管脚,将其设置为 GPIO_Output。
    在这里插入图片描述

  2. 代码生成。
    点击菜单 “Project Manager” 按钮,进入工程配置界面,如下图所示。

  • 输入项目名称,选择项目的保存路径。(注意不要与之前的项目名称相同)
  • 将Toolchain / IDE 设定为 STM32CubeIDE(根据用户安装和使用的 IDE 选择,也可以选择 EWARM、MDK-ARM、MakeFile、CMake 等IDE工具)
  • 点击右上角 “GENERATE CODE” 生成代码
  • 加载完毕后,弹出代码生成提示窗口,点击“ OPEN PROJECT”,进入 STM32CubeIDE。

在这里插入图片描述

在这里插入图片描述

  1. 在 STM32CubeIDE 打开例程文件 main.c。
    代码生成后,已经自动进入 STM32CubeIDE,并打开 GPIO_IOToggle 项目。注意这个 GPIO_IOToggle 项目,不是系统提供的例程项目,而是我们刚刚创建新项目,其文件目录结构也与上节例程项目不同。
    本项目中的程序内容也不是从例程项目下载安装的,而是 CubeMX 根据用户在新建项目中的配置自动生成的。
    从 Scr 目录打开程序文件 main.c,如下图所示。

在这里插入图片描述

  1. 打开程序文件 main.c。

本项目中的程序文件 main.c 不是从例程项目下载安装的,而是 CubeMX 根据用户在新建项目中的配置自动生成的。因此,在 轮询程序 while(1) 中,并没有延时翻转实现 LED 闪烁的程序代码。

CubeMX 生成的程序文件 main.c 中的轮询程序 while(1) 的代码如下。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

    /* -- Sample board code for User push-button in interrupt mode ---- */
    if (BspButtonState == BUTTON_PRESSED)
    {
      /* Update button state */
      BspButtonState = BUTTON_RELEASED;
      /* -- Sample board code to toggle leds ---- */
      BSP_LED_Toggle(LED_GREEN);

      /* ..... Perform your action ..... */
    }
    /* USER CODE END WHILE */
  }
  1. 编写 LED 闪烁的程序代码。

在 轮询程序 while(1) 中,在 “/* … Perform your action … */” 位置,添加延时翻转实现 LED 闪烁的程序代码如下。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

    /* -- Sample board code for User push-button in interrupt mode ---- */
    if (BspButtonState == BUTTON_PRESSED)
    {
      /* Update button state */
      BspButtonState = BUTTON_RELEASED;
      /* -- Sample board code to toggle leds ---- */
      BSP_LED_Toggle(LED_GREEN);
    }

    /* ..... Perform your action ..... */
    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 200 ms */
    HAL_Delay(200);
    /* USER CODE END 3 */
  }
  /* USER CODE END WHILE */
  1. 程序编辑、编译与调试
  • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
  • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
  • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。NUCLEO-G431RB 开发板上的 LD2 指示灯以 200ms 开始闪烁。
  1. 修改延时时间,重新编译、烧录和运行程序。

将轮询程序 while(1) 中的延时时间修改为 1000ms,来实现 LED2 以 1s 进行闪烁。

    /* ..... Perform your action ..... */
    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 1000 ms */
    HAL_Delay(1000);
    /* USER CODE END 3 */

程序烧录后,点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。此时 NUCLEO-G431RB 开发板上的 LD2 指示灯以 1000ms 开始闪烁。

  1. 关闭项目,关闭 STM32CubeIDE 。

  2. NUCLEO-G431RB 开发板重新上电(只要用 USB 为开发板供电即可,并不需要连接 PC)。按下黑色按键 B2,MCU 重启(Reset),开发板上的 LD2 指示灯以 1000ms 开始闪烁。


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

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

相关文章

【力扣专题栏】字母异词分组,如何利用强大的容器(unordered_map)解决该问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//创建哈希表unordered_map<string,vector<string&g…

vscode clangd for cuda 插件配置

这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务&#xff0c;如果下不下来请考虑用&#x1fa9c; 下载好后check一下&#xff0c;检查是否正常 正常的标志 注意…

Oracle 11g DataGuard GAP处理

1 说明 在Oracle Data Guard中&#xff0c;GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况&#xff0c;会导致数据保护和实时数据复制的能力受到影响。 Oracle Data Guard架构日志同步有三个阶段&#xff1a; 日志发送&#xff1b;日志接收&#xff…

2023年编程语言排行榜

随着编程语言的不断发展&#xff0c;跟踪哪些语言处于领先地位至关重要。在这两部分中&#xff0c;我们将深入研究 2023 年排名前 40 的编程语言&#xff0c;并分析它们脱颖而出的原因。 40 种顶级 TIOBE 编程语言 1. Python 受欢迎程度&#xff1a;非常高学习难度&#xff1…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code)&#xff0c;发明于1837年(另有一说是1836年)&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff0c;在这里作一简单处理&#xff0c;仅产生点(Dit)和划(Dah)&#xff0c;时长在0.25秒之内为点&#xff0c;超过为划…

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求&#xff0c;例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

在美团外卖上抢券 Python来实现

在美团外卖上抢券的 Python 实现 在如今的互联网时代&#xff0c;自动化脚本已经成为了许多用户生活中不可或缺的工具。尤其是在购物、抢券等场景中&#xff0c;自动化脚本能够帮助我们节省大量的时间和精力。今天&#xff0c;我们将一起探索如何使用 Python 编写一个简单的脚…

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

即插即用显著位置注意力spab,涨点起飞

题目&#xff1a;Salient Positions based Attention Network for Image Classification 论文地址&#xff1a;https://arxiv.org/pdf/2106.04996 创新点 提出了基于显著位置的注意力机制&#xff1a;论文提出了一种名为SPAblock的显著位置选择算法(SPS)&#xff0c;通过在注…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接&#xff1a;R语言贝叶斯&#xff1a;INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说&#xff0c;该模式的目的用于隔离接口&#xff0c;换句话说&#xff0c;就是扮演中间层的角色&#xff0c;把本来结合…

物流公司出货单据模板下载软件 佳易王物流单管理系统操作使用教程

一、概述 【软件资源文件下载可以点文章最后信息卡片】 物流公司出货单据模板下载软件物流单管理系统操作使用教程 ‌软件功能‌&#xff1a; ‌记录管理‌&#xff1a;记录运费、垫付货款、代收货款、保险费等。‌打印模式‌&#xff1a;支持空白单、卷纸、印刷好的单子等多…

谷粒商城のsentinelzipkin

文章目录 前言一、Sentinel1、什么是Sentinel2、项目配置3、使用案例3.1、流控3.2、降级3.3、黑白名单设置 二、Zipkin1、什么是Zipkin2、项目配置3、整合案例 前言 本篇介绍Spring Cloud Ali的sentinel组件&#xff0c;用于对微服务的熔断降级&#xff0c;以及链路追踪zipkin的…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

keepalived + nginx 实现网站高可用性(HA)

keepalive 一、keepalive简介二、实现步骤1. 环境准备2. 安装 Keepalived3. 配置 Keepalived 双机主备集群架构4. 配置 Nginx5. 启动Keepalived6. 测试高可用性7. 配置keepalived 双主热备集群架构 一、keepalive简介 目前互联网主流的实现WEB网站及数据库服务高可用软件包括&a…

破局智能制造:难点分析与对策

一、 智能制造过程中可能遇到难点: 1. --概念和技术繁多--: - 智能制造领域涉及众多概念和技术,如工业4.0、CPS、工业互联网等,让企业难以选择和应用。 2. --缺乏经验和成功案例--: - 企业在推进智能制造时缺乏经验,存在信息孤岛、自动化孤岛等问题,缺乏统一规划和系统推…

中汽测评观察 亲子出行健康为先,汽车健康用材成重要考量

在中国&#xff0c;亲子出行是驾车的主要场景之一。汽车不仅仅是一种便捷的交通工具&#xff0c;更是生活中的移动“第三空间”。在此背景下&#xff0c;汽车健康用材不仅是消费者关注的焦点问题&#xff0c;也成为汽车企业发力的重要方向。 对消费者而言&#xff0c;在家庭亲子…