STM32F103RB多通道ADC转换功能实现(DMA)

news2024/10/2 12:17:13

目录

概述

1 硬件

1.1 硬件实物介绍

1.2 nucleo-f103rb

1.3 软件版本

2 软件实现

2.1 STM32Cube配置参数

 2.2 项目代码

3 功能代码实现

3.1 ADC功能函数

3.2 函数调用

4  测试

4.1 DMA配置data width:byte

4.2  DMA配置data width:Half word 

4.3  DMA配置data width: word 


源代码下载地址:

STM32F103RB多通道ADC转换功能实现(DMA)资源-CSDN文库

概述

本文主要介绍使用STM32F103RB实现多通道数据转换的功能,采用DMA方式,每个模拟通道对应一个DMA channel,实现高速的数据模数转换功能。还验证了配置DMA的数据宽度对输出数据的影响。

1 硬件

1.1 硬件实物介绍

STM32 Nucleo-64板基于MB1136参考板(NUCLEO-F030R8,Nucleo-f070rb, nucleo-f072rb, nucleo-f091rc, nucleo-f103rb,Nucleo-f302r8, nucleo-f303re, nucleo-f334r8, nucleo-f401re
Nucleo-f410rb, nucleo-f411re, nucleo-f446re, nucleo - 1010rb,Nucleo-l053r8, nucleo-l073rz, nucleo-l152re, nucleo-l452re,NUCLEO-L476RG)为用户提供了一种经济实惠且灵活的方式来尝试新概念并使用LQFP64封装中的STM32微控制器构建原型,选择从性能、功耗和特性的各种组合中。的ARDUINO®Uno V3连接支持和ST morpho头提供了一个简单的扩展了Nucleo开放开发平台的功能选择专门的盾牌。STM32 Nucleo板不需要任何单独的探头因为它们集成了ST-LINK/V2-1调试器和编程器。STM32 Nucleo板提供全面的免费软件库和示例STM32Cube MCU封装,以及直接访问Arm®Mbed™在线资源在http://mbed.org/上。

1.2 nucleo-f103rb

笔者选择CN8接口,实现多通道的ADC转换功能。其接口定义如下:

1.3 软件版本

软硬件信息版本信息
STM32 MCUSTM32F103RB
KeilMDK ARM 5.38
调试工具:st-linkST-LINK/V2-1
STM32CubeProgrammerv2.16.0

2 软件实现

2.1 STM32Cube配置参数

1)ADC端口配置,选择ADC1,同时使能DMA功能

ADC chanel 对应的端口 

2)使能ADC的DMA通道中断

3)DMA通道数选择,总共使能6个channel,那么DMA数据buff需要配置6个长度的数组

4) 采样数据模式选择

 2.2 项目代码

完成参数配置之后,使用GENERATE PROJECT 生成项目,打开项目文件如下:

3 功能代码实现

 3.1 ADC功能函数

STM32Cube生成的代码已经完成ADC和DMA的初始化工作,要启动ADC的数据转换功能,只需调用启动函数即可。本文主要介绍使用DMA的方式启动ADC数据转换该功能。

笔者专门编写一个函数用于启动ADC功能

代码第24行:  定义ADC的通道总数

代码第29行:  启动ADC转换标定功能

代码第30行:  启动DAM方式数据转换功能。

源代码函数如下:

/* USER CODE BEGIN 0 */
#define TOTAL_CHANNEL        6

static uint16_t adcDMAValue[TOTAL_CHANNEL];
void ADC_ConvInit( ADC_HandleTypeDef* hadc )
{
    HAL_ADCEx_Calibration_Start(&hadc1); 
    HAL_ADC_Start_DMA(hadc, (uint32_t*)adcDMAValue, TOTAL_CHANNEL);
}

/* USER CODE END 0 */

3.2 函数调用

在MX_ADC1_Init函数,已经完成了ADC模块的初始化,如果打算启动ADC功能,只需在MX_ADC1_Init的尾部调用ADC_ConvInit函数实现ADC的启动。

4  测试

4.1 DMA配置data width:byte

在STM32Cube中配置如下参数

DMA通道buff配置如下:

生成代码下载到板卡中运行

DMA采集数据buff数据字节数

#define TOTAL_CHANNEL        6

static uint16_t adcDMAValue[TOTAL_CHANNEL];

根据仿真数据可知:

adcDMAValue[0]: 

                       ch0:  (byte)adcDMAValue[0],   

                       ch1:  (byte)(adcDMAValue[0]>>8),   

adcDMAValue[1]: 

                       ch2:  (byte)adcDMAValue[1],   

                       ch3:  (byte)(adcDMAValue[1]>>8),   

adcDMAValue[2]: 

                       ch4:  (byte)adcDMAValue[2],   

                       ch5:  (byte)(adcDMAValue[2]>>8),   

仿真数据值:

4.2  DMA配置data width:Half word 

在STM32Cube中配置如下参数

 DMA通道buff配置如下:

 生成代码下载到板卡中运行

因为每个通道采样的数据为两个字节,此时:

adcDMAValue[0]:  ch-0

adcDMAValue[1]:  ch-1

adcDMAValue[2]:  ch-2

adcDMAValue[3]:  ch-3

adcDMAValue[4]:  ch-4

adcDMAValue[5]:  ch-5

4.3  DMA配置data width: word 

在STM32Cube中配置如下参数

 DMA通道buff配置如下:

 生成代码下载到板卡中运行

因为每个通道采样的数据为两个字节,此时:

(adcDMAValue[1]<<8)| adcDMAValue[0]  :   ch-0

(adcDMAValue[3]<<8)| adcDMAValue[2]  :   ch-1

(adcDMAValue[5]<<8)| adcDMAValue[4]  :   ch-2

(adcDMAValue[7]<<8)| adcDMAValue[6]  :   ch-3

(adcDMAValue[9]<<8)| adcDMAValue[8]  :   ch-4

(adcDMAValue[11]<<8)| adcDMAValue[10]  :   ch-5

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

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

相关文章

Qt常用基础控件总结—输入部件(QComboBox类和QLineEdit)

输入部件 下拉列表控件QComboBox 类 QComboBox 类是 QWidget 类的直接子类,该类实现了一个下拉列表(组合框)。 QComboBox 类中的属性函数 1)count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空组合框或未设置当前项目的组合框,…

Java版Flink使用指南——合流

大纲 新建工程无界流奇数Long型无界流偶数Long型无界流奇数String型无界流 合流UnionConnect 测试工程代码 在《Java版Flink使用指南——分流导出》中&#xff0c;我们通过addSink进行了输出分流。本文我们将介绍几种通过多个无界流输入合并成一个流来进行处理的方案。 新建工…

ArcGIS实战—等高线绘制

今天分享一个使用ArcGIS Pro制作等高线地图的教程&#xff0c;等高线是用来表达地形最常见的形式之一。那么如何制作一个效果比较好的等高线地形图呢&#xff1f;让我们开始今天的教程。 1 DEM数据 第一步&#xff1a;获取DEM地形数据&#xff0c;网址&#xff08;https://dwt…

贴脸细看Mixtral 8x7B- 稀疏混合专家模型(MoE)的创新与推动

贴脸细看Mixtral 8x7B- 稀疏混合专家模型&#xff08;MoE&#xff09;的创新与推动 原创 一路到底孟子敬 上堵吟 2024年01月15日 20:05 美国 I. 引言 A. Mixtral 8x7B的背景和目的 • 背景&#xff1a;随着大型语言模型在自然语言处理&#xff08;NLP&#xff09;领域的广泛…

本地 HTTP 文件服务器的简单搭建 (deno/std)

首发日期 2024-06-30, 以下为原文内容: 在本地局域网搭建一个文件服务器, 有很多种方式. 本文介绍的是窝觉得比较简单的一种. 文件直接存储在 btrfs 文件系统之中, 底层使用 LVM 管理磁盘, 方便扩容. 使用 btrfs RAID 1 进行镜像备份 (一个文件在 2 块硬盘分别存储一份), 防止…

es是如何处理索引数据的变动的?

1 概述 es是如何处理索引数据的变动的&#xff1f; 或者说索引数据变动时&#xff0c;es会执行哪些操作&#xff1f; refresh、fsync、merge 和 flush 操作有何作用&#xff1f; es是如何确保即使es发生宕机数据也不丢失的&#xff1f; 在回答上述问题前&#xff0c;可以先…

【Linux】多线程_1

文章目录 九、多线程1. 线程概念2. 线程的控制 未完待续 九、多线程 1. 线程概念 我们知道&#xff1a;进程 内核数据结构 进程代码和数据 。那什么是线程呢&#xff1f;线程是进程内部的一个执行分支。一个进程内部可以有多个执行流&#xff08;内核数据结构&#xff09;&…

[高频 SQL 50 题(基础版)]第一千七百五十七题,可回收且低脂产品

题目&#xff1a; 表&#xff1a;Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | low_fats | enum | | recyclable | enum | ---------------------- product_id 是该表的主键&#xff08;具有唯…

大数据专业创新人才培养体系的探索与实践

一、引言 随着大数据技术的迅猛发展&#xff0c;其在各行各业中的应用日益广泛&#xff0c;对大数据专业人才的需求也日益增长。我国高度重视大数据产业的发展&#xff0c;将大数据作为国家战略资源&#xff0c;推动大数据与各行业的深度融合。教育部也积极响应国家战略&#…

C语言编程4:复合赋值,递增递减运算符,局部变量与全局变量,本地变量,转义字符

一篇文章带你玩转C语言基础语法4&#xff1a;复合赋值&#xff0c;递增递减运算符&#xff0c;局部变量与全局变量&#xff0c;本地变量&#xff0c;转义字符 一、复合赋值&#x1f33f; 1.1&#x1f4a0;定义 赋值就是给任意一个变量或者常量赋一个值&#xff0c;这个值可以…

在亚马逊云科技AWS上利用SageMaker机器学习模型平台搭建生成式AI应用(附Llama大模型部署和测试代码)

项目简介&#xff1a; 接下来&#xff0c;小李哥将会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon …

Jmeter在信息头中设置Bearer与 token 的拼接值

思路&#xff1a;先获取token&#xff0c;将token设置成全局变量&#xff0c;再与Bearer拼接。 第一步&#xff1a;使用提取器将token值提取出来&#xff0c;使用setProperty函数将提取的token值设置成全局变量&#xff0c;在登录请求后面添加BeanShell取样器 或者 BeanShell后…

嘉立创EDA学习笔记

嘉立创EDA学习笔记 PCB引线一、设计规则间距安全间距其他间距 物理导线网络长度差分对过孔尺寸 平面铺铜 PCB布线 作为一个嵌入式开发潜力工程师&#xff0c;咱们必须得学会如何绘制开发板以满足顾客各种功能的需求&#xff0c;因此小编去学习了一下嘉立创&#xff0c;写这篇文…

配网行波故障预警与定位装置:配电线路安全性与可靠性的保障

配网行波故障预警与定位装置&#xff1a;配电线路安全性与可靠性的保障 一、传统配网故障排查的困境 1. 巡检效率低下&#xff1a;在二十世纪80年代及以前&#xff0c;电力线路故障的排查主要依赖于人工巡检&#xff0c;这种方式效率低下&#xff0c;特别是在故障区间较大的情…

Seata解决分布式事务

我举的例子是&#xff1a;在网上购物时&#xff0c;我们支付后&#xff0c;订单微服务会更新订单状态&#xff0c;同时会远程调用购物车微服务清空购物车&#xff0c;和调用商品微服务完成商品库存减一。 我们曾经说的事务是只能在本微服务完成回滚&#xff0c;意思就是如果过…

PHP全域旅游景区导览系统源码小程序

&#x1f30d;【探索无界&#xff0c;畅游无忧】全域旅游景区导览系统小程序全攻略 &#x1f4f1;【一键启动&#xff0c;智能导览在手】 告别纸质地图的繁琐&#xff0c;迎接全域旅游景区导览系统小程序的便捷时代&#xff01;只需轻轻一点&#xff0c;手机瞬间变身私人导游…

如何快速将Excel定义的表结构转换为MySQL的建表语句

目录 引言 方法一&#xff1a;使用Python编程 步骤一&#xff1a;安装必要的库 步骤二&#xff1a;读取Excel文件 步骤三&#xff1a;编写函数生成建表语句 注意事项 方法二&#xff1a;使用Excel VBA 步骤一&#xff1a;启用VBA编辑器 步骤二&#xff1a;编写VBA代码…

通过git将文件push到github 远程仓库

1.先git clone 代码地址 git clone htttp://github.com/用户名/test.git 2. 添加文件 例如&#xff1a;touch 1.txt 3.将文件添加到暂存区 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.与远程仓库建立关联 git remote add 远程仓库名 远程仓库…

文件操作和IO流(Java版)

前言 我们无时无刻不在操作文件。可以说&#xff0c;我们在电脑上能看到的图片、视频、音频、文档都是一个又一个的文件&#xff0c;我们需要从文件中读取我们需要的数据&#xff0c;将数据运算后也需要将结果写入文件中长期保存。可见文件的重要性&#xff0c;今天我们就来简…

泛微E-Cology getFileViewUrl SSRF漏洞复现

0x01 产品简介 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 0x02 漏洞概述 泛微E-Cology getFileViewUrl 接口处存在…