[STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

news2024/9/8 11:18:57

目录

一、前言

二、实现步骤

        1.STM32CUBEMX配置

        2.Keil工程程序设计

三、结语


一、前言

        本文通过STM32CUBEMX实现对ADC的数据采集和滤波操作,帮助各位开发者完成与模拟量输入的采集工作。

二、实现步骤

        1.STM32CUBEMX配置

        以STM32F103C8T6为例,打开STM32CUBEMX,配置好系统时钟为72MHz后,在ADC中使能IN1、IN2(数量不限,但两个以上有额外操作)

        随后,由于我们选择了两个输入口,因此我们还需要按照下图进行配置。先将Number of conversion设置为2,随后将Rank 2channel设置为Channel 1(此处对应IN1)

        这样的配置可以实现同时采集两个通道的值。

        随后使能连续转换模式,如下图。

        按照下图步骤配置DMA。

        随后使能中断,配置中断优先级

        再次来到时钟树配置页,关闭错误提示。

        修改下图处配置,将ADC采集频率设定为12MHz

        配置完工程的其他必要信息后,生成代码并打开。

        2.Keil工程程序设计

        先定义ADC-DMA数据数组,此处定义数组大小为100,代表采集100次数据。

        随后在主函数初始化部分开启DMA采集。

        开启后,相关数据将会被采集并存储在ADC数组中,以上述配置为例,数组内的存储顺序是ADC[0]是IN0的值,ADC[1]是IN1的值,ADC[2]是IN0的值......一直循环,如下表所示。 

数据ADC[0]ADC[1]ADC[2]ADC[...]ADC[98]ADC[99]
采集口IN0IN1IN0...IN0IN1

 

        对于得到的值,我们还需要进行转换才能得到真正的电压值。以上使用的代码和转换公式如下。

uint32_t ADC[100]={0};
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC,100);

电压值Val=ADC[0]/4096.0 *量程

        上述的情况下,相当于我们一共采集的100次的值,每个通道50次,而我们只使用第一次的值,这不符合编程规范,我们应该对其取平均值做滤波处理。滤波函数如下。

float GetValue(int start,int step,int size){
	int i,count=0;
	float value=0;
	for(i=start;i<size;i+=step)
	{
		value+=ADC[i]/4096.0*3.3;
		count++;
	}
	return value/count;	
}

        这时,我们可以调用函数来获取平均值了。以本文配置为例,start代表起始为0,步长为2,最大为100。

float val=GetValue(0,2,100);

        随后我们可以对值进行打印或其他操作。

三、结语

        通过上述步骤,我们可以实现DMA方式采集ADC的数据,并且通过对数据进行平均值滤波的处理后得到稳定的ADC值,这种方法可以运用于摇杆、光敏等等传感器的数据采集上,稳定性好、可靠性高。

        如果对上述相关程序有疑义,欢迎评论区交流。水平有限,仅作技术分享;若有错误,恳请批评指正。

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

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

相关文章

接口响应断言-json

json认识JSONPath源码类学习/json串的解析拓展学习 目的&#xff1a;数据返回值校验测试 json认识 json是什么-是一种数据交换格式&#xff0c;举例平时看到的json图2&#xff0c;在使用中查看不方便&#xff0c;会有格式转化的平台&#xff0c;json格式的展示 JSON在线视图…

OSPF减少LSA更新量1

OSPF的LSA优化 一、汇总——优化骨干区域 (1)域间汇总ABR设备基于某个区域的1/2类LSA计算所得的最佳路由&#xff0c;共享给其他区域时&#xff0c;进行汇总传递。 [r2]ospf 1 [r2-ospf-1]area 1——明细路由所在区域&#xff0c;该ABR设备必须和明细路由在同一区域 [r2-ospf…

学习javascript的函数

1.什么是函数&#xff1f; 可以重复被使用的代码块 作用&#xff1a;函数可以把具有相同或者相似逻辑的代码“包裹起来”&#xff0c;有利于代码的复用。 2.函数的基本使用 1.定义函数 利用关键字Function 定义函数&#xff08;声明函数&#xff09; function 函数名(){函…

windows-386、windows-amd64、windows-arm64这三者有什么区别?

选择文件的版本出现下面问题&#xff1a; Architectures windows-386 &#xff1a;这些是针对 32 位 Windows 系统编译的。windows-amd64 &#xff1a;这些是针对具有 AMD 或 Intel x86-64 架构的 64 位 Windows 系统编译的。windows-arm64 &#xff1a;这些是针对具有 ARM 架…

模型实战(20)之 yolov8分类模型训练自己的数据集

yolov8分类模型训练自己的数据集 yolov8,一个实时快速的端到端的集检测、分割、分类、姿态识别于一体的视觉算法库/框架本文将给出yolov8 分类模型的数据集制作格式及训练流程 1. 环境搭建 关于虚拟环境的搭建真的是老生常谈了,给出一个简单的搭建流程吧#新建虚拟环境 conda …

大模型时代的具身智能系列专题(三)

清华高阳团队 高阳为清华叉院助理教授&#xff0c;本科毕业于清华大学计算机系&#xff0c;博士毕业于UC Berkeley。博士导师是Vision领域的大牛Trevor Darrell&#xff0c;读博期间和Sergey Levine合作开始强化学习方面的探索&#xff0c;博后跟随Pieter Abbeel做强化学习&am…

7.类和对象

类和对象 当我们没有去了解过java的知识点中 不免产生一些问题&#xff1a; 什么是类&#xff1f;什么是对象&#xff1f; 记住一句话&#xff1a;在java当中 一切皆对象 类&#xff1a;是用来描述一个对象的 而对象是一个真正存在的实体 在Java这门纯面向对象的语言中 我们…

利用ArcGIS Python批量拼接遥感影像(arcpy batch processing)

本篇文章将说明如何利用ArcGIS 10.1自带的Python IDLE进行遥感影像的批量拼接与裁剪。 1.运行环境&#xff1a;ArcGIS10.1 (安装传送门)、Python IDLE 2.数据来源&#xff1a;地理空间数据云 GDEMV2 30M分辨率数字高程数据 3.解决问题&#xff1a;制作山西省的DEM影像 如下…

重生之 SpringBoot3 入门保姆级学习(05、 Bean 装配)

重生之 SpringBoot3 入门保姆级学习&#xff08;05、 Bean 装配&#xff09; [TOC](重生之 SpringBoot3 入门保姆级学习&#xff08;05、 Bean 装配&#xff09;)2.2.1 通过 ioc.xml 文件配置2.1.2 通过 Configuration 注解配置2.2.4 测试 Bean 是否生效 新建 User 类 package…

构建镜像时候出现奇怪的现象时候

一、背景 构建镜像时候&#xff0c;昨天还好好的&#xff0c;今天出现奇怪的现象 二、查看现象 docker system df#cache 显示600G 三、步骤 这操作比较轻微&#xff0c;20以前的缓存清理掉 docker builder prune --filter until480h # 清除20填以前的构建缓

深入理解栏目函数:从基础结构到实际应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、栏目函数的基本结构解析 代码案例 二、栏目函数的参数理解与返回值探究 参数取值与返…

决策树|随机森林 GBDT XGBoost|集成学习

文章目录 1 决策树模型1.1 决策树模型简介1.2 决策树模型核心问题1.2.1 分类划分标准1.2.1.1 信息增益1.2.1.2 增益率1.2.1.3 基尼系数 1.2.2 停止生长策略1.2.3 剪枝策略 1.3 决策树 - python代码1.3.1 结果解读1.3.2 决策树可视化1.3.3 CV - 留一法 2 集成学习2.1 Boosting2.…

MySQL:如果用left join的话,左边的表一定是驱动表吗

一、前言 在日常开发过程中关于MySQL的优化方面&#xff0c;我们知道小表驱动大表原理。例如left join&#xff0c;放在左边的表作为驱动表。但是用left join的话&#xff0c;左边的表一定是驱动表吗&#xff0c;本文将通过案例分析给出详细分析。 二、概念 在MySQL中&#xf…

初识C++ · 模拟实现vector

目录 前言&#xff1a; 1 部分简单函数的实现 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷贝构造 7 构造 8 赋值 9 memcpy的问题 10 迭代器失效 前言&#xff1a; 继上文模拟实现了string之后&#xff0c;接着就模拟实现vector&…

Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口

目录 线程&#xff1a; 继承Thread类&#xff1a; 实现Runnable类&#xff1a; 实现Callable接口&#xff1a; 验证多线程&#xff1a; 线程&#xff1a; 定义&#xff1a;进程可以同时执行多个任务&#xff0c;每个任务就是线程。举个例子&#xff1a;一个Java程序&#…

rfid资产管理系统如何帮助医院管理耗材的

RFID资产管理系统可以帮助医院管理耗材&#xff0c;提高耗材管理的效率和准确性。以下是它可以发挥作用的几个方面&#xff1a; 1. 实时跟踪和定位&#xff1a;使用RFID标签附加在耗材上&#xff0c;可以实时跟踪和定位耗材的位置。医院可以通过系统查询耗材的实时位置&#xf…

以梦为马,不负韶华(3)-AGI在企业服务的应用

AGI在企业服务中&#xff0c;各应⽤已覆盖企业全流程&#xff0c;包含⼈⼒、法务、财税、流程⾃动化、知识管理和软件开发各领域。 由于⼤语⾔模型对⽂本处理类场景有着天然且直接的适配性&#xff0c;⽂本总结、⽂本内容⽣成、服务指引等发展起步早且应⽤成熟度更⾼。 在数据…

景源畅信电商:做抖店的成本高吗?

在当今数字化时代&#xff0c;抖音不仅仅是一个分享短视频的平台&#xff0c;更是一个充满商机的市场。随着抖音用户量的激增&#xff0c;越来越多的商家和个人开始关注在抖音上开设店铺&#xff0c;即所谓的“抖店”。那么&#xff0c;做抖店的成本高吗?这个问题困扰着许多初…

南京“十元手冲咖啡” :流量怎么砸中你?

三包速溶咖啡、一个塑料热水壶&#xff0c;却意外打造出一款爆品。 南京“十元手冲咖啡”突然爆火&#xff0c;起初靠的是出人意料&#xff0c;你以为她要从罐子里擓粉了&#xff0c;她掏出来三条雀巢速溶&#xff1b;你以为她要用机器打水了&#xff0c;她拿出来一个上世纪的…

鸿蒙开发接口UI界面:【@ohos.mediaquery (媒体查询)】

媒体查询 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 &#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入模块 import mediaquery from ohos.media…