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

目录

概述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javascript DOM BOM 笔记

Web API API的概念 API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细…

使用esptool工具备份ESP32的固件(从芯片中备份下来固件)

本文以Windows电脑为例 板子为esp32-c3 1下载python 可在官网中下载,此处不进行讲解 使用如下代码查看是否安装了 Python&#xff08;终端输入&#xff09; python 2下载esptool 在终端输入如下代码即可下载 使用 pip&#xff08;推荐&#xff09;: 在你已经安装的 Pyth…

【大模型LLM面试合集】大语言模型架构_layer_normalization

2.layer_normalization 1.Normalization 1.1 Batch Norm 为什么要进行BN呢&#xff1f; 在深度神经网络训练的过程中&#xff0c;通常以输入网络的每一个mini-batch进行训练&#xff0c;这样每个batch具有不同的分布&#xff0c;使模型训练起来特别困难。Internal Covariat…

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下&#xff0c;各种辅助工具层出不穷&#xff0c;妙笔生词智能写歌词软件便是其中之一。那么&#xff0c;它到底表现如何呢&#xff1f; 妙笔生词智能写歌词软件&#xff08;veve522&#xff09;的突出优点在于其便捷性和高效性。对于那些灵感稍…

软件许可证优化怎么做最好!

在当今数字化发展的浪潮中&#xff0c;软件许可证的优化成为了 IT 总监们面临的一项重要挑战。在许可数量受限的情况下&#xff0c;如何将现有许可发挥最大利用率&#xff0c;是一个亟待解决的问题。 信息采集是优化的基础。 我们需要采集关于软件使用频率、使用时长、用户部门…

Python学习中使用循环(for, while)

在Python编程语言中&#xff0c;循环是一个非常重要的概念&#xff0c;可以帮助我们在代码中重复执行某些操作。Python支持两种主要的循环结构&#xff1a;for 循环和 while 循环。 1. for 循环 for 循环用于遍历一个序列&#xff08;如列表、元组、字符串&#xff09;或其他…

Linux 一键部署Mysql 8.4.1 LTS

mysql 前言 MySQL 是一个基于 SQL(Structured Query Language)的数据库系统,SQL 是一种用于访问和管理数据库的标准语言。MySQL 以其高性能、稳定性和易用性而闻名,它被广泛应用于各种场景,包括: Web 应用程序:许多动态网站和内容管理系统(如 WordPress)使用 MySQL 存…

STM32学习历程(day6)

EXTI外部中断使用教程 首先先看下EXTI的框图 看这个框图就能知道要先初始化GPIO外设 那么和前面一样 1、先RCC使能时钟 2、配置GPIO 选择端口为输入模式&#xff0c; 3、配置AFIO&#xff0c;选择我们用的GPIO连接到后面的EXTI 4、配置EXTI&#xff0c;选择边沿触发方式…

【Linux】升级FastJSON版本-jar

摘要 在长期运行的应用服务器上&#xff0c;近期的安全漏洞扫描揭示了fastjson组件存在潜在的安全隐患&#xff08;FastJSON是一个Java 语言实现的 JSON 解析器和生成器。FastJSON存在远程代码执行漏洞&#xff0c;恶意攻击者可以通过此漏洞远程执行恶意代码来入侵服务器&…

iOS 开发技巧 - 使用本地 json 文件

前言 使用本地 json 文件的场景&#xff0c;在我们开发功能的阶段&#xff0c;服务端接口字段定义好了后&#xff0c;有些接口响应很慢&#xff0c;请求到响应可能要 几十秒甚至一分钟&#xff0c;我们需要频繁调用接口来调试功能&#xff1b;还有就是调用一些我们需要付费的三…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 记忆感知规划使用工具 LLM是大语言模型&#xff0c;prompt提示词影响LLM的输出质量 描述需求——>背景——>解决思路&#xff0c;提示词文档。 当有明确的需求和实现需求的路径时&#xff0c;可以通过搭建工作流来完成标准化任务为…

昇思25天学习打卡营第16天|应用实践之Vision Transformer图像分类

基本介绍 今天同样是图像分类任务&#xff0c;也更换了模型&#xff0c;使用的时候计算机视觉版的Transformer&#xff0c;即Vision Transformer&#xff0c;简称ViT。Transformer本是应用于自然语言处理领域的模型&#xff0c;用于处理语言序列&#xff0c;而要将其应用于图像…

CentOS6用文件配置IP模板

CentOS6用文件配置IP模板 到 CentOS6.9 , 默认还不能用 systemctl , 能用 service chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 ### chkconfig sshd on 对应 systemctl enable sshd 启用,开机启动该服务 sudo chkconfig sshd onservice sshd start …

三级_网络技术_12_路由设计技术基础

1.R1、R2是一个自治系统中采用RIP路由协议的两个相邻路由器&#xff0c;R1的路由表如下图(a)所示&#xff0c;当R1收到R2发送的如下图(b)的(V.D)报文后&#xff0c;R1更新的4个路由表项中距离值从上到下依次为0、3、3、4 那么&#xff0c;①②③④可能的取值依次为()。 0、4、…

LaySNS模板仿RiPro日主题素材源码资源下载响应式CMS模板

该主题是网上泛滥的RiPro主题仿制而成的laysns模板&#xff0c;原主题是很强大的&#xff0c; 全站功能是通过ajax响应实现的&#xff0c;但本人技术有限&#xff0c;只会仿&#xff0c;不会移植&#xff0c;&#xff08;主要ajax这里不知道怎么弄&#xff09;。 另外就是网上…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说&#xff1a; Redis Desktop Manager 简单的来讲就是Redis可视化工具&#xff0c;可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

大型综合医院、妇幼保健院智慧产科信息系统源码,支持二次开发,授权后可商用。

一套采用java语言开发&#xff0c;前端框架为Vue&#xff0c;ElementUIMySQL数据库&#xff0c;前后端分离架构的数字化产科管理系统源码&#xff0c;自主版权&#xff0c;多个大型综合医院、妇幼保健院应用案例&#xff0c;支持二次开发&#xff0c;授权后可商用。 系统特点&a…

Qt/QML学习-ListView

QML学习 ListView例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("ListView")Rectangle {height: listView.heightwidth: listView.wi…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下&#xff1a; r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

328. 奇偶链表

https://leetcode.cn/problems/odd-even-linked-list/https://leetcode.cn/problems/odd-even-linked-list/ 解题思路&#xff1a; 把第一个和第二个节点分别作为奇数、偶数的头节点&#xff0c;当遇到奇节点&#xff0c;删除&#xff0c;并插入到奇数头节点后&#xff0c;这样…