STM32G4 电机外设篇(一) GPIO+UART

news2025/6/3 3:45:09

目录

  • 一、STM32G4 电机外设篇(一) GPIO+UART
      • 1 GPIO
        • 1.1 STM32CUBEMX 配置以及Keil代码
        • 1.2 代码和实验现象
      • 2 UART
        • 2.1 STM32CUBEMX 配置以及Keil代码
        • 2.2 代码和实验现象
    • 附学习参考网址
      • 欢迎大家有问题评论交流 (* ^ ω ^)

一、STM32G4 电机外设篇(一) GPIO+UART

1 GPIO

1.1 STM32CUBEMX 配置以及Keil代码
  • GPIO会控制二极管亮灭来指示板子的状态
  • 也可以开关电机
  1. 打开STM32CUBEMX选择MCU(中间更新太慢可以不更新)
  2. 选择 MCU HSE为外部晶振
    在这里插入图片描述
  3. 配置时钟树,PLL时钟源选择HSE,外部晶振24M,HCLK配置为170M;
    在这里插入图片描述
  4. debug接口配置为串行接口
    在这里插入图片描述
  5. 配置MCU的GPIO口,给GPIO口命名,开启NVIC终端管理程序
    在这里插入图片描述
  6. 配置项目路径,项目位置,代码生成方式,点击生成代码,打开工程
    在这里插入图片描述
    7.打开Keil工程
1.2 代码和实验现象
  • 在主函数147行添加如下代码
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
	if(Button1_Pin == GPIO_Pin)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
	}
	if(Button2_Pin == GPIO_Pin)
	{
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
	}
	if(Button3_Pin == GPIO_Pin)
	{
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
	}
  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}
  • 按照之前的文章接线,编译代码并下载,按下复位按键
  • 最终完成功能的实现
    • 三个按钮可以分别控制LED灯的亮灭

2 UART

2.1 STM32CUBEMX 配置以及Keil代码
  • 串口通讯在电机中一般使用TTL通讯,电机是电磁耦合干扰很大的设备,一般串口线和电源线是缠绕在一起走线的,所以电源的干扰型号也会耦合到串口通讯上,容易导致错误。所以一般使用485或者can来通讯。TTL一般只用来debug和实时观察电机的一些状态,打印波形等
  • 在上一章的基础上,使能 UASRT3,对应 PB10和 PB11 I/O口,将波特率调整为
    115200Bits/s
  1. 打开之前的Cubemx程序,配置UART的Rx和Tx引脚
    • 详细的配置要看STM32G4的手册,举例过采样的配置,就可以更好的进行信号的采样
      在这里插入图片描述
  2. 配置中断和DMA
    在这里插入图片描述
    在这里插入图片描述
  3. 生成代码并在Keil中打开
2.2 代码和实验现象
  • 在主函数28行添加如下代码,添加头文件
    #include <stdio.h>

  • 在主函数160行添加如下代码,按键实现LED的反转,并且通过串口打印翻转的信息

  • 同时把串口发送的字符转变为数据流发送出去

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
	if(Button1_Pin == GPIO_Pin)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		printf("LED1 Toggle\r\n");
	}
	if(Button2_Pin == GPIO_Pin)
	{
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		printf("LED2 Toggle\r\n");
	}
	if(Button3_Pin == GPIO_Pin)
	{
		HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
		printf("LED1 and LED2 open\r\n");
	}
  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

int fputc(int ch, FILE *f)
{
	while((USART3->ISR & 0x40) == 0);
	USART3->TDR = (uint8_t)ch;
	return ch;
}
  • 注意这里要打开microlib使用,否则printf可能会卡住
    在这里插入图片描述

  • 按照之前的文章接线,编译代码并下载,按下复位按键

  • 打开串口调试助手,按下按键,实现实验效果
    在这里插入图片描述

  • 剩余UART部分参考视频学习(包括DMA发送数据和中断接收数据)

附学习参考网址

  1. STM32G4 FOC开发实战

欢迎大家有问题评论交流 (* ^ ω ^)

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

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

相关文章

Lua 的速度为什么比 Python 快

Lua 的执行速度通常比 Python 快&#xff0c;主要原因在于其解释器设计轻量、虚拟机效率高、内存管理策略更为精简&#xff0c;以及语言本身对动态特性的控制较严。其中&#xff0c;Lua 使用了 register-based 的虚拟机架构&#xff0c;而 Python&#xff08;CPython&#xff0…

【iOS】方法交换

方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换&#xff0c;他的主要作用是在运行的时候将一个方法的实现替…

数据结构:线性表的基本操作与链式表达

个人主页 文章专栏 成名之作——赛博算命之梅花易数的Java实现 陆续回三中&#xff0c;忘回漏回滴滴~感谢各位大佬的支持 一.线性表的定义和基本操作 1.1定义 线性表是具有相同数据类型的n个数据元素的有序数列&#xff0c;n为表长 第一个元素叫表头元素&#xff0c;除了他…

C++:设计模式--工厂模式

更多内容&#xff1a;XiaoJ的知识星球 目录 1.简单工厂模式1.1 简单工厂1.2 实现步骤1.3 实现代码1.4 优缺点 2.工厂模式2.1 工厂模式2.2 实现步骤2.3 实现代码2.4 优缺点 3.抽象工厂模式3.1 抽象工厂模式3.2 实现步骤3.3 实现代码3.4 优缺点 1.简单工厂模式 . 1.1 简单工厂 …

国产化Excel处理组件Spire.XLS教程:如何使用 C# 将 Excel(XLS 或 XLSX)文件转换为 PDF

Excel 是常见的数据处理与呈现工具&#xff0c;但直接共享 Excel 文件可能面临格式错乱、兼容性不足或数据泄露的风险。为了保证文档在不同平台和终端上的稳定展示&#xff0c;开发者常常需要将 Excel 文件转换为 PDF 格式。 本文将详细介绍如何使用 C#和.NET Excel 库——Spi…

B3623 枚举排列(递归实现排列型枚举)

B3623 枚举排列&#xff08;递归实现排列型枚举&#xff09; - 洛谷 题目描述 今有 n 名学生&#xff0c;要从中选出 k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行&#xff0c;两个正整数 n,k。 输出格式 若干行&#xff0c;每行 k 个正整数…

Fine Pruned Tiled Light Lists(精细删减的分块光照列表)

概括 在这篇文章&#xff0c; 我将介绍一种Tiled Light 变体&#xff0c;主要针对AMD Graphics Core Next&#xff08;GCN&#xff09;架构进行优化&#xff0c;我们的方法应用于游戏 古墓丽影:崛起 中&#xff0c;特别是我们在通过光列表生成和阴影贴图渲染之间交错进行异步计…

openresty+lua+redis把非正常访问的域名加入黑名单

一、验证lua geoIp2是否缺少依赖 1、执行命令 /usr/local/openresty/bin/opm get anjia0532/lua-resty-maxminddb 执行安装命令报错,缺少Digest/MD5依赖 2、Digest/MD5依赖 yum -y install perl-Digest-MD5 GeoIP2 lua库依赖动态库安装&#xff0c;lua库依赖libmaxminddb实…

使用Mathematica绘制随机多项式的根

使用ListPlot和NSolve直接绘制&#xff1a; (*返回系数为r和s之间整数的n次随机多项式*) eq[n_, r_, s_] : RandomInteger[{r, s}, {n}] . Array[Power[x, # - 1] &, n] (*返回给定随机多项式的根所对应的笛卡尔坐标*) sol[n_, r_, s_] : {Re[#], Im[#]} & / (x /.…

IEEE PRMVAI 2025 WS 26:计算机视觉前沿 Workshop 来袭!

宝子们&#xff0c;搞计算机视觉和深度学习的看过来啦&#xff01;&#x1f389; 2025 年 IEEE 第三届模式识别、机器视觉和人工智能国际会议里&#xff0c;Workshop 26 简直是科研宝藏地&#xff01; 这次 Workshop 聚焦 “Deep learning - based low - level models for comp…

360浏览器设置主题

设置默认主题&#xff1a; 1.右上角有个皮肤按钮 进来后&#xff0c;右边有个回复默认皮肤按钮。 换成彩色皮肤后&#xff0c;找按钮不太好找了。

最卸载器——Geek Uninstaller 使用指南

Geek Uninstaller 是一款轻量级的第三方卸载工具&#xff0c;专为 Windows 系统设计&#xff0c;提供比系统默认卸载器更彻底的应用清除能力。它体积小、绿色免安装&#xff0c;使用起来简单直观&#xff0c;但功能却不含糊。 一、为什么要用 Geek Uninstaller&#xff1f; Wi…

应急响应靶机-web3-知攻善防实验室

题目&#xff1a; 1.攻击者的两个IP地址 2.攻击者隐藏用户名称 3.三个攻击者留下的flag 密码&#xff1a;yj123456 解题&#xff1a; 1.攻击者的两个IP地址 一个可能是远程&#xff0c;D盾&#xff0c;404.php,192.168.75.129 找到远程连接相关的英文,1149代表远程连接成功…

【基于SpringBoot的图书购买系统】Redis中的数据以分页的形式展示:从配置到前后端交互的完整实现

引言 在当今互联网应用开发中&#xff0c;高性能和高并发已经成为系统设计的核心考量因素。Redis作为一款高性能的内存数据库&#xff0c;以其快速的读写速度、丰富的数据结构和灵活的扩展性&#xff0c;成为解决系统缓存、高并发访问等场景的首选技术之一。在图书管理系统中&…

Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程

Jupyter MCP 服务器是基于模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;的 Jupyter 环境扩展组件&#xff0c;它能够实现大型语言模型与实时编码会话的无缝集成。该服务器通过标准化的协议接口&#xff0c;使 AI 模型能够安全地访问和操作 Jupyter 的核心…

PMO价值重构:从项目管理“交付机器”到“战略推手”

在数字化转型浪潮中&#xff0c;项目管理办公室&#xff08;PMO&#xff09;正经历着前所未有的角色蜕变。传统上&#xff0c;PMO往往被视为项目管理的“交付机器”&#xff0c;专注于项目的按时交付和资源分配。然而&#xff0c;随着企业对战略执行的重视&#xff0c;PMO正逐渐…

零知开源——STM32F407VET6驱动Flappy Bird游戏教程

简介 本教程使用STM32F407VET6零知增强板驱动3.5寸TFT触摸屏实现经典Flappy Bird游戏。通过触摸屏控制小鸟跳跃&#xff0c;躲避障碍物柱体&#xff0c;挑战最高分。项目涉及STM32底层驱动、图形库移植、触摸控制和游戏逻辑设计。 目录 简介 一、硬件准备 二、软件架构 三、…

力扣HOT100之动态规划:300. 最长递增子序列

这道题之前刷代码随想录的时候也刷过&#xff0c;现在又给忘完了。自己尝试着写了一下&#xff0c;发现怎么写都写不对&#xff0c;直接去看视频了。。我自己写的时候的定义是&#xff1a;考虑下标0 ~ i范围内索赔能取到的最长严格递增子序列的长度&#xff0c;后面发现在写递推…

在win10/11下Node.js安装配置教程

下载安装 官网链接https://nodejs.org/zh-cn 下载好以后双击打开&#xff0c;点击下一步 勾选&#xff0c;然后下一步 选择路径、下一步 下一步 配置环境 找到我们安装的文件夹&#xff0c;创建两个文件夹 node_global node_cache 在CMD中配置路径 npm config set p…

飞致云开源社区月度动态报告(2025年5月)

自2023年6月起&#xff0c;中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…