当前位置: 首页 > news >正文

STM32G4系列MCU双ADC多通道数据转换的应用

目录

概述

1  STM32Cube配置项目

1.1 基本参数配置

1.1.1  ADC1参数配置

1.1.2 ADC2参数配置

1.2 项目软件架构

2 功能实现

2.1 ADC转换初始化

2.2 ADC数据组包

3 测试函数

3.1 Vofa数据接口

3.2 输入数据

4 测试

4.1 ADC1 通道测试

 4.2 ADC2 通道测试


概述

本文主要介绍STM32G4系列MCU双ADC多通道数据转换的应用的方法,笔者通过STM32Cube工具配置多路ADC,并使用DAC模块产生1路模拟信号,验证ADC模块数据转换的功能。

1  STM32Cube配置项目

1.1 基本参数配置

1.1.1  ADC1参数配置

1)配置ADC1的端口

2)配置ADC2的端口

3)配置ADC的通道参数

step - 1 : 使能和选择相关的通道

 step - 2 :选择如下配置

step-3: 配置数据模式和通道号信息

 

 step-4: 使能DMA通道信息

1.1.2 ADC2参数配置

 ADC2的参数配置方法和ADC1相似,这里不再做重复介绍。

1.2 项目软件架构

完成1.1小节的参数配置之后,就可以生成项目代码,其具体架构如下:

2 功能实现

2.1 ADC转换初始化

由于系统采用DMA的方式实现ADC转换功能,所以直接从buff中读取数据即可。初始化代码如下:

代码第32~33行: 定义两个buff,用于存放ADC转换数据的结果

代码38行:初始化ADC1模块

代码39行:启动ADC1的DMA模式ADC数据转换功能

代码41行:初始化ADC2模块

代码42行:启动ADC2的DMA模式ADC数据转换功能

 源代码如下:

uint16_t adc1_rawlist[3];
uint16_t adc2_rawlist[5];void Sample_Init(void)
{HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1_rawlist, 2);HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2_rawlist, 4);
}

2.2 ADC数据组包

编写一个函数,将ADC1转换的数据和ADC2转换的数据转行成一个数据包,方便调用:

代码83~90行:实现数据组包功能

代码92行:使用vofa将数据包显示出来

3 测试函数

3.1 Vofa数据接口

代码21行:定义数据长度

代码22行:定义发送数据端口

代码25~29行:定义vofa数据包的结构

代码40~47行:定义发送数据函数

源代码如下:

/* USER CODE BEGIN Header */
/********************************************************************************* File Name        :  vofaDebug.c* Description      :  debug source code interface******************************************************************************* @attention*
* COPYRIGHT:    Copyright (c) 2024  mingfei.tang* CREATED BY:   ming fei.tang
* DATE:         JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "vofaDebug.h"
#include "usart.h"#define LEN   6
#define DEBUG_UART_OBJ huart2/* Private variables ---------------------------------------------------------*/
typedef struct Frame
{float fdata[LEN];unsigned char tail[4];
} Frame_t;Frame_t Frame_Buff =
{.tail[0] = 0x00,.tail[1] = 0x00,.tail[2] = 0x80,.tail[3] = 0x7f,
};/* Public user code ---------------------------------------------------------*/
void Debug_PrintJustFloat(const uint16_t *pData, uint16_t Size)
{for (uint16_t i = 0; i < Size; i++){Frame_Buff.fdata[i] = pData[i];}HAL_UART_Transmit_DMA(&DEBUG_UART_OBJ, (uint8_t *)&Frame_Buff, sizeof(Frame_Buff));
}/* Private user code for printf log ------------------------------------------*/int fputc(int ch, FILE *f)
{HAL_UART_Transmit_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);return (ch);
}int fgetc(FILE *f)
{int ch;HAL_UART_Receive_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);return (ch);
}void Debug_fresh( void )
{
//    int ch;//    HAL_UART_Receive_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);
}/* End of this file */

3.2 输入数据

使用STM32G4的DAC2通道产生一路模式信号,用于作为ADC的输入数据。

1)选择端口和通道

2)配置参数

 3)编写输出函数

代码52行:启动DAC数据转换功能

代码53行:初始化端口电平

4)实现正弦波信号函数

源代码文件如下:

/* USER CODE BEGIN Header */
/********************************************************************************* File Name        :  waveLib.c* Description      :  main task ******************************************************************************* @attention*
* COPYRIGHT:    Copyright (c) 2024  tangmingfei2013@126.com* CREATED BY:   mingfei.tang
* DATE:         JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
#include "waveLib.h"
#include "dac.h"
#include <stdio.h> 
#include <string.h>
#include <stdbool.h>
#include <math.h>#define PI    3.14159void DAC_SetConvert( uint32_t value)
{HAL_DAC_SetValue( &hdac2, DAC_CHANNEL_1, DAC_ALIGN_12B_R,value );
}float dac_triangle_wave( void )
{static double t = 0;float angle;if( t >= 1 ){t = 0;}t += 0.001;angle = t*800;return  angle;
}float asin_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}value = asin( t ); angle = (180*value)/3.1415926;t += 0.001;return  angle;
}float sin_wave( void )
{float value, angle;static double t = -1;angle = 2*PI*t;value = 1000*sin( angle )+1500; t += 0.001;if( t >= 1 ){t = -1;}return  value;
}/* End of this file */

4 测试

4.1 ADC1 通道测试

将DAC的数据输出端口连接到ADC1  - PC0端口上,测试输出数据的波形

DAC的波形数据:

 ADC`-PC0接口转换的数据波形:

 4.2 ADC2 通道测试

将DAC的数据输出端口连接到ADC2  - PC2端口上,测试输出数据的波形

 原始数据波形和转换后的数据波形叠加:

相关文章:

STM32G4系列MCU双ADC多通道数据转换的应用

目录 概述 1 STM32Cube配置项目 1.1 基本参数配置 1.1.1 ADC1参数配置 1.1.2 ADC2参数配置 1.2 项目软件架构 2 功能实现 2.1 ADC转换初始化 2.2 ADC数据组包 3 测试函数 3.1 Vofa数据接口 3.2 输入数据 4 测试 4.1 ADC1 通道测试 4.2 ADC2 通道测试 概述 本文…...

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果&#xff0c;然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了&#xff01;这个 5 天 这个工具是一个音频文件格式转换工具&#xff0c;支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…...

ssl证书过期,nginx更换证书以后仍然显示过期证书

记一次nginx部署异常 今天提示ssl证书过期了&#xff0c;然后重新申请了一个证书 反反复复折腾了一个上午&#xff0c;还更换了好几个平台&#xff0c;发现怎么更换都没用&#xff0c;百度上的解决方法都试过了&#xff0c;发现都没用&#xff0c;证书还是显示的原来那一个&…...

原型模式(Prototype Pattern)——对象克隆、深克隆与浅克隆及适用场景

原型模式&#xff08;Prototype Pattern&#xff09;是设计模式中的一种创建型模式&#xff0c;目的是通过复制现有的对象来创建新的对象&#xff0c;而不是通过传统的实例化方式。原型模式常常用于需要创建大量类似对象的场景&#xff0c;可以提高性能并减少资源的消耗。下面将…...

从工标网网站解析标准信息

import requests from bs4 import BeautifulSoup 将标准搜索关键词转化成GBK格式&#xff0c;并用%连接转化后16进制&#xff0c;转化成工标网的查询网址url text “GB/T 9755” utf8_encoded_text text.encode(‘GBK’) #print(utf8_encoded_text) hex_representation ‘…...

如何在MySQL中开启死锁日志及查看日志

在数据库的多用户环境中&#xff0c;死锁是一个常见的问题&#xff0c;它可能会影响到数据库的性能和稳定性。MySQL提供了一些工具和命令来帮助我们识别和解决死锁问题。本文将介绍如何在MySQL中开启死锁日志以及如何查看这些日志。 一、为什么需要死锁日志 死锁是指两个或多…...

VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation

GitHub - xiaozhen228/VCP-CLIP: (ECCV 2024) VCP-CLIP: A visual context prompting model for zero-shot anomaly segmentation 需要构建正样本&#xff0c;异常样本&#xff0c;以及对应的Mask...

分类算法中的样本不平衡问题及其解决方案

一、样本不平衡问题概述 在机器学习的分类任务中&#xff0c;样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战&#xff0c;尤其在处理少数类样本时&#xff0c;模型可能难以有效学习其特征。 以二分类为例&#xff0c;理想情况…...

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…...

[创业之路-169]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -1- 看宏观/行业 - 行业:激光器行业的详细分析

目录 一、激光器行业的详细分析 1. 行业总容量分析 2. 行业成长性分析 3. 行业的供需结构 4. 行业的发展阶段与动态S曲线 5. 行业集中度 6. 关键成功因素 二、对深紫外激光器进行如下分析 1、行业总容量分析 2、行业成长性分析 3、行业的供需结构 4、行业的发展阶段…...

抽象工厂模式的理解和实践

在软件开发中&#xff0c;设计模式是解决常见问题的最佳实践。抽象工厂模式是一种创建型设计模式&#xff0c;提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们的具体类。本文将详细解释抽象工厂模式的概念、结构、优点、缺点&#xff0c;并通过Java代…...

WIDER FACE数据集转YOLO格式

1. 引出问题 本人最近在做毕设相关内容&#xff0c;第一阶段目标是通过目标检测来统计课堂人数&#xff0c;因此需要对人脸和人头进行目标检测。模型方面没什么好说的无脑用YOLO&#xff0c;数据集方面&#xff0c;人脸部分找到了来自港中文的WIDER FACE数据集。但是解压后发现…...

项目启动的基本配置

开启驼峰命名 如果字段名与属性名符合驼峰命名规则&#xff0c;MyBatis会自动通过驼峰命名规则映射。 在application.yml配置文件中&#xff0c;可以添加以下配置来开启驼峰命名规则&#xff1a; mybatis:configuration:map-underscore-to-camel-case: true 这段配置的作用…...

Ubuntu桌面突然卡住,图形界面无反应

1.可能等待几分钟&#xff0c;系统会自动反应过来。你可以选择等待几分钟。 2.绝大多数情况系统是不会反应过来的&#xff0c;这时候可以进入tty终端直接注销用户。 (1)Ubuntu有6个tty终端&#xff0c;按住CtrlAltF1可以进入tty1终端&#xff0c;&#xff08;同理CtrlAltF2&a…...

Next.js系统性教学:拦截路由与路由处理器

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 路由拦截 (Intercepting Routes) 1.1 什么是路由拦截&#xff1f; 1.2 配置拦截路由 1.3 示例&#xff1a;模态框预览 1.4 使用场景 2. 路由处理器 (Route Handl…...

Python编码风格

Python代码的常用排版格式主要遵循PEP 8规范&#xff0c;这是Python社区广泛接受的编码风格指南。以下是一些关键的排版格式要求&#xff1a; 一、缩进 使用4个空格作为缩进级别&#xff0c;不要使用Tab键&#xff0c;更不能混合使用Tab和空格。 二、行长度 每行代码的最大…...

flask创建templates目录存放html文件

首先&#xff0c;创建flask项目&#xff0c;在pycharm中File --> New Project&#xff0c;选择Flask项目。 然后&#xff0c;在某一目录下&#xff0c;新建名为templates的文件夹&#xff0c;这时会是一个普通的文件夹。 然后右击templates文件夹&#xff0c;选择Unmark as …...

微信小程序里的小游戏研发需要什么技术栈

研发小程序里的小游戏通常需要以下技术栈&#xff1a; 前端技术 HTML5 / CSS3&#xff1a;用于构建游戏的界面布局和样式。JavaScript&#xff1a;作为核心编程语言&#xff0c;实现游戏的逻辑和交互。小程序开发框架&#xff1a;如微信小程序的开发框架&#xff0c;了解其 API…...

2024年上半年网络工程师案例分析真题及答案解析

2024年上半年网络工程师案例分析真题及答案解析 1、试题一(20分) 阅读以下说明,回答问题。 [说明]某高校网络拓扑如下图所示,两校区核心(CORE-1,CORE-2),出口防火墙(NGFW-1,NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收效,校区相距40km。两校区默认由本地出…...

Ant Design Vue v4版本如何解决1px没有被postcss-px2rem转成rem的问题

背景说明 如果你的 Ant Design Vue 项目有要做适配的需求&#xff0c;那首先要选择一种适配方案。笔者选择的是用 postcss-px2rem 进行适配。笔者在配置了 postcss-px2rem的相关配置后&#xff0c;发现 postcss-px2rem 没有对 Ant Design Vue 进行适配。在网上看了一些文章之后…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...