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

目录

一、前言

二、实现步骤

        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.mzph.cn/bicheng/17172.shtml

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

相关文章

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理!

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 NeRF2Mesh 提出了一种从多视角 RGB 图像重建纹理表面网格的新方法。它克服了传统 NeRF 模型的局限性&#xff0c;由于其隐式表示&#xff0c;传统 NeRF 模…

高斯分步正态分布

高斯分布&#xff0c;也称为正态分布&#xff08;Normal Distribution&#xff09;&#xff0c;是统计学和概率论中最重要的分布之一。它由德国数学家卡尔弗里德里希高斯&#xff08;Carl Friedrich Gauss&#xff09;首先系统研究并命名。以下是关于高斯分布的详细介绍&#x…

基于 Pre-commit 的 Python项目代码风格统一实践

背景信息 统一代码风格首先需要定义参照的规范&#xff0c;每个团队可能会有自己的规范&#xff0c;我们选择的规范是 yapf mypy isort&#xff0c;如果保证所有的研发人员都遵循相关规范呢&#xff1f; 鼓励 IDE 中对应的插件的安装&#xff0c;通过直接对应的插件&#x…

bootstrap实现天平效果

之前提到了&#xff0c;最近&#xff0c;孩子的幼儿园让家长体验“半日助教活动”&#xff0c;每个家长需要讲授15-20分钟的课程。作为一名程序员&#xff0c;实在没有能教的课程&#xff0c;只能做了一个小游戏&#xff0c;带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

【读书】读书笔记——理科生的视角:底层逻辑+数学之美

1&#xff0c;底层逻辑1&#xff08;看清这个世界的底牌&#xff09; 刘润 著 0&#xff09;什么是底层逻辑&#xff1f; 底层逻辑是&#xff1a;事物之间共同点、变化背后不变的东西事&#xff1b;看清事物的本质&#xff0c;才能在复杂变化中从根本上解决问题。 1&#x…

【Java继承】(超级详细!!!)

【Java继承】&#xff08;超级详细&#xff01;&#xff01;&#xff01;&#xff09; 1、 继承的概念2 、继承的语法3、 父类成员访问3.1 子类中访问父类的成员变量3.2 子类中访问父类的成员方法 4、 super关键字5 、子类的构造方法6、 继承关系上的执行顺序7、protected 关键…

ubuntu20.04安装后配置:wifi、屏幕亮度、Nvidia驱动等

文章目录 一、安装时最好用英语&#xff0c;否则Downloads等home下文件夹是中文二、安装后开机无法进入系统图形界面三、清理不必要软件&#xff0c;更新系统四、屏幕亮度、Nvidia驱动五、wifi 一、安装时最好用英语&#xff0c;否则Downloads等home下文件夹是中文 安装完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

错误代码 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加类型&#xff0c;导致编译错误 解决 class school{ public:stri…

选项卡式小部件QTabWidget

文章目录 1. 详细介绍2. 常用属性3. 信号4. 常用函数5. 官方示例Tab Dialog QTabWidget提供一堆选项卡式小部件。 1. 详细介绍 选项卡式部件提供一个选项卡栏和一个用于显示与每个选项卡相关的页面的页面区域。 默认情况下&#xff0c;选项卡栏显示在页面区域上方&#xff0c;…

Vue.js - 计算属性与侦听器 【0基础向 Vue 基础学习】

文章目录 计算属性 computedcomputed 的使用方法computed 与 method 的区别计算属性完整写法 watch 侦听器&#xff08;监视器&#xff09;简单写法 → 简单类型数据&#xff0c;直接监视完整写法 → 添加额外配置项 计算属性 computed computed 的使用方法 **概念&#xff1…

web题解,基础知识巩固(qsnctf)

1.文章管理系统 1&#xff09;打开题目&#xff0c;把它页面翻完了&#xff0c;没看懂它有啥用 2&#xff09;看了看源码&#xff0c;也是一样的&#xff0c;没找到有用的东西 3&#xff09;想着可能还是在隐藏文件里找&#xff0c;那我就直接用dirsearch扫扫看 4&#xff09;…

初识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&…

DataFrame—数据汇总9

s3.sort_index() 文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名--章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xf…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…

如何去除视频上的文字?免费无痕去水印分享!视频制作良器!

对于需要进行二次创作的视频素材&#xff0c;去除原有的文字可以提供一个更加干净的画布&#xff0c;方便创作者在其基础上进行新的创作和编辑。同时&#xff0c;去除文字后的视频也更方便分享到各种平台&#xff0c;避免因为平台对文字的限制而导致视频无法发布或传播。 要去除…

Kotlin 标准函数 with、run、apply 的定义和使用

Kotlin 标准函数 with、run、apply 的定义和使用 1. with 函数 定义&#xff1a; with 函数允许你在一个对象的上下文中执行一个 lambda 表达式&#xff0c;而不需要在 lambda 表达式中重复引用该对象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云计算期末复习(1)

云计算基础 作业&#xff08;问答题&#xff09; &#xff08;1&#xff09;总结云计算的特点。 透明的云端计算服务 “无限”多的计算资源&#xff0c;提供强大的计算能力 按需分配&#xff0c;弹性伸缩&#xff0c;取用方便&#xff0c;成本低廉资源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安装 Python 3.10_yum python3.10-CSDN博客

Homebrew安装mysql之后,启动和使用MySQL服务:

启动MySQL服务&#xff1a; brew services start mysql 手动启动服务&#xff1a; mysql.server start 例如&#xff1a; mysql.server start Starting MySQL .. SUCCESS! 停止 MySQL服务&#xff1a; brew services stop mysql 或者 mysql.server stop 重启MySQL服务&a…

IDEA使用Maven打包项目的所有的依赖

要使用 Maven 命令将 Spring Boot 项目的依赖打包到 lib 文件夹中&#xff0c;你可以在终端中运行以下命令&#xff1a; mvn dependency:copy-dependencies -DoutputDirectory./lib这个命令会将项目的所有依赖&#xff08;包括运行时依赖&#xff09;复制到当前目录的 lib 文件…