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

news2024/11/23 3:58:53

目录

概述

1 软硬件介绍

1.1 软件版本

1.2 ADC引脚介绍

 2  STM32Cube配置项目

2.1 配置基本参数

2.2 ADC通道配置

2.3 DMA通道配置

3 项目代码介绍

3.1 自生成代码

3.2 ADC-DMA初始化

3.3 测试函数

3.4 ADC1、ADC2、ADC3轮询采集数据存贮格式

4 测试


源代码下载地址:

NUCLEO-F446RE:STM32F446RE实现多通道ADC转换功能实现(DMA)资源-CSDN文库

概述

本文主要介绍应用基于STM32F446RE实现多通道ADC转换功能实现。笔者同时使用ADC1、ADC2、ADC3,每个ADC模块采集两路模拟量,且同时使用DMA方式存贮数据。笔者详细介绍基于STM32Cube配置ADC参数,并生成项目代码的方法。完成项目配置后,生成代码,并实现初始化通道的功能,然后编译代码,下载到板卡中验证其功能。

1 软硬件介绍

1.1 软件版本

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

1.2 ADC引脚介绍

1)  NUCLEO-F446RE上的IO定义

2) Analog 端口定义 

 2  STM32Cube配置项目

2.1 配置基本参数

STM32Cube已经提供NUCLEO系列开发板对应的配置模版,笔者使用开发板型号为NUCLEO-F446RE,在Board信息栏,找到对应的选择型号后,点击该选项,软件会自动完成基本上

配置好的参数内容如下:

2.2 ADC通道配置

 配置选项实现:
ADC1:   

              CH0     PA0    IN0      -  A0

              CH1     PA1    IN1       - A1         

ADC2:   

             CH2     PA4    IN4       -  A2

             CH3     PB0    IN8       -  A3

ADC3:

            CH10   PC0   IN10       - A4 

            CH11    PC1   IN11       - A5

STM32Cube上的配置信息如下:

2.3 DMA通道配置

 1)ADC1 DMA配置

 2)ADC2 DMA配置

 3)ADC3 DMA配置

3)DMA配置

DMA数据宽度配置

3 项目代码介绍

3.1 自生成代码

在adc.c文件中生成3个初始化函数:

1) ADC1模块的初始化函数

void MX_ADC1_Init(void)   

2) ADC2模块的初始化函数

void MX_ADC2_Init(void)   

3) ADC3模块的初始化函数

void MX_ADC3_Init(void)   

 3.2 ADC-DMA初始化

代码26行: 定义DMA数据buff

代码第30行:启动ADC-3

代码第31行:启动ADC-2

代码第32行:启动ADC-1

#define TOTAL_DATA_LEN        6

static uint32_t adc123DMAValue[TOTAL_DATA_LEN];

void ADC_ConvInit(void)
{
    HAL_ADC_Start(&hadc3);
    HAL_ADC_Start(&hadc2);
    HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc123DMAValue,TOTAL_DATA_LEN);
    
}

 3.3 测试函数

代码427~434行: 为每个通道填充数据

代码436行:  打印数据

源代码如下:

static uint16_t adc1DMAValue[6];
void HAL_ADC_Pintflog( void )
{
    
    adc1DMAValue[0] =  (uint16_t)adc123DMAValue[0];          // PA0  IN0 -  A0
    adc1DMAValue[1] =  (uint16_t)(adc123DMAValue[1]>>16);    // PA1  IN1 -  A1         
    
    adc1DMAValue[2] =  (uint16_t)(adc123DMAValue[0]>>16);      // PA4  IN4 -  A2
    adc1DMAValue[3] =  (uint16_t)(adc123DMAValue[2]);         // PB0 IN8 -  A3
    
    adc1DMAValue[4] =  (uint16_t)adc123DMAValue[1];          // PC1 N11  - A4
    adc1DMAValue[5] =  (uint16_t)(adc123DMAValue[2]>>16);    //  PC0 N10  - A5 
    
    printf(" ch1: %d, ch2: %d, ch3: %d, ch4: %d, ch5: %d, ch6: %d \r\n", 
             adc1DMAValue[0],adc1DMAValue[1],
             adc1DMAValue[2],adc1DMAValue[3],
             adc1DMAValue[4],adc1DMAValue[5]);
}

3.4 ADC1、ADC2、ADC3轮询采集数据存贮格式

当3路ADC一起采集数据时,存储数据的规律如下:

4 测试

1) 选择A5通道进行测试

当选中到最大位置式,A5通道数据如下:

 

2)选择A0通道测试

 

 当选中到最小位置式,A0通道数据如下:

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

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

相关文章

clickhouse学习笔记(五)SQL操作

目录 一、增 二、删改 三、查询以及各种子句 1、with子句 a、表达式为常量 b、表达式为函数调用 c、表达式为子查询 2、from子句 3、array join子句 a、INNER ARRAY JOIN b、LEFT ARRAY JOIN c、数组的一些函数 groupArray groupUniqArray arrayFlatten splitBy…

小米订单锐减背后的挑战与应对之道

近期,富士康印度子公司Bharat FIH面临高管离职、工厂关闭的困境,其背后原因之一是小米订单的显著下滑,据报道,这一降幅高达70%。这一现象不仅反映了富士康在印度市场的艰难处境,也揭示了小米在全球智能手机市场面临的挑…

Atom CMS v2.0 SQL 注入漏洞(CVE-2022-24223)

前言 概要 CVE-2022-24223 是一个发现于 Atom CMS v2.0 中的 SQL 注入漏洞。该漏洞存在于 /admin/login.php 文件中,通过该文件,攻击者可以在未经身份验证的情况下执行任意的 SQL 命令。 漏洞描述 该漏洞位于 Atom CMS 的管理员登录页面(/a…

甄选范文“论区块链技术及应用”,软考高级论文,系统架构设计师论文

论文真题 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer, P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节点,因此避免了中…

跨境电商代购系统与电商平台API结合的化学反应

随着全球化的不断推进和互联网技术的飞速发展,跨境电商已成为国际贸易的重要组成部分。跨境电商代购系统作为连接国内外消费者与商品的桥梁,不仅为消费者提供了更多元化的购物选择,也为商家开辟了更广阔的市场空间。在这一过程中,…

数据结构——顺序表(java实现)

文章目录 顺序表顺序表的定义代码实现:创建一个顺序表的类在顺序表中增加一条新的数据展示顺序表中内容在pos位置处插入一条数据判断顺序表中是否包含指定的数据查找某个数据在顺序表中的位置获取pos位置的元素将pos位置的元素改为value删除顺序表中第一个出现的数据…

搭建基础库~

前言 项目中会用到工具库、函数库以及一些跟框架绑定的组件,如果这些基础模块每个项目都实现一套,维护起来那真的头大,你说呢😉 搭建流程 准备工作 创建文件夹myLib、安装Git以及pnpm 目录大概就系这样子: myLib ├…

从零开始做题:好怪哦

题目 给出一个压缩文件 解题 方法1 01Edit打开,发现是个反着的压缩包(末尾倒着的PK头) import os# 目标目录路径 # target_directory /home/ai001/alpaca-lora# 切换到目标目录 # os.chdir(target_directory)# 打印当前工作目录以确认…

# Redis 入门到精通(一)数据类型(1)

Redis 入门到精通(一)数据类型(1) 一 、Redis 入门到精通 基本介绍 1、Redis 基础 ( windows 环境 ) redis 入门数据类型通用命令Jedis 2、Redis 高级 ( linux 环境 ) 持久化redis.conf 配置事务集群 3、Redis 应用 ( linux…

WAIC | 2024年世界人工智能大会“数学与人工智能”学术会议成功举办!

由斯梅尔数学与计算研究院(Smale Institue of Mathematics & Computation)主办的2024年世界人工智能大会(WAIC)“数学与人工智能”学术会议7月4日在上海世博中心圆满落幕!作为全球性高级别学术研讨会,此次会议由华院计算技术&…

SQLServer的系统数据库用别的服务器上的系统数据库替换后做跨服务器连接时出现凭证、非对称金钥或私密金钥的资料无效

出错作业背景: 公司的某个sqlserver服务器要做迁移,由于该sqlserver服务器上数据库很多,并且做了很多的job和维护计划,重新安装的sqlserver这些都是空的,于是就想到了把系统4个系统数据库进行替换,然后也把…

Camera Raw:裁剪

Camera Raw 的裁剪 Crop面板提供了裁剪、旋转、翻转、拉直照片等功能,通过它们可以更精确地调整照片的视角和范围,以达到最佳二次构图的视觉效果。 快捷键:C ◆ ◆ ◆ 使用方法与技巧 1、使用预设 选择多种裁剪预设(如 1:1、16:…

JAVA基础-----128陷阱

一、何为128陷阱 Java中Integer类型在使用比较时的特殊行为------128陷阱,解释了当数值在-128到127范围内,由于valueOf方法的缓存机制导致地址相同,比较为真;超出这个范围则新分配内存,地址不同,比较为假。…

YOLOv10改进 | 主干篇 | 低照度增强网络PE-YOLO改进主干(改进暗光条件下的物体检测模型)

一、本文介绍 本文给大家带来的改进机制是低照度图像增强网络PE-YOLO中的PENet,PENet通过拉普拉斯金字塔将图像分解成多个分辨率的组件,增强图像细节和低频信息。它包括一个细节处理模块(DPM),用于通过上下文分支和边…

数据链路层(超详细)

引言 数据链路层是计算机网络协议栈中的第二层,位于物理层之上,负责在相邻节点之间的可靠数据传输。数据链路层使用的信道主要有两种类型:点对点信道和广播信道。点对点信道是指一对一的通信方式,而广播信道则是一对多的通信方式…

办公必备——ONLYOFFICE8.1版本桌面编辑器

一、介绍ONLYOFFICE ONLYOFFICE是一款免费的开源办公软件,它可以让你创建、编辑和分享文档、表格和演示文稿。就像微软的Office一样,但它是完全免费的,而且可以在多种设备上使用,包括电脑和手机。它还支持多人同时在线编辑文档&am…

Golang | Leetcode Golang题解之第223题矩形面积

题目: 题解: func computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 int) int {area1 : (ax2 - ax1) * (ay2 - ay1)area2 : (bx2 - bx1) * (by2 - by1)overlapWidth : min(ax2, bx2) - max(ax1, bx1)overlapHeight : min(ay2, by2) - max(ay1, by1)…

独立开发者系列(22)——API调试工具apifox的使用

接口的逻辑已经实现,需要对外发布接口,而发布接口的时候,我们需要能自己简单调试接口。当然,其实自己也可以写简单的代码调试自己的接口,因为其实就是简单的request请求或者curl库读取,调整请求方式get或者…

第11章 规划过程组(二)(11.10制订进度计划)

第11章 规划过程组(二)11.10制订进度计划,在第三版教材第395~397页;文字图片音频方式 第一个知识点:定义及作用 分析活动顺序、持续时间、资源需求和进度制约因素,创建项目进度模型,从而落实项目…

基于单片机的太阳能热水器控制系统设计

随着我国经济水平的不断提高,民众对生活质量的追求也在不断进步,对于现代家庭而言,热水器成为了必备的生活电器。目前市面上的电器主要是电热水器、燃气热水器以及太阳能热水器。就能源节约性能而言,太阳能热水器占据了绝对优势&a…