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

目录

概述

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通道数据如下:

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

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

相关文章

抖音本地生活火爆!普通人如何申请抖音本地生活服务商?

当前,随着抖音外卖的正式开放,抖音本地生活的热度也迎来了新的高潮,与抖音本地生活服务商怎么申请等话题相关的词条更是成为了多个创业者社群的热搜榜单的常客。 事实上,就抖音本地生活服务商怎么申请等问题本身而言,…

ITK-Canny边缘检测

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 Canny边缘检测原理 Canny边缘检测是一种多步骤的图像处理算法,用于提取图像中的边缘,被广泛认为是边缘检…

名企面试必问30题(二十七)——你能为公司带来什么呢?

回答一: “首先,我具备扎实的软件测试专业知识和丰富的实践经验。我能够运用各种测试方法和工具,确保公司产品的质量,降低产品上线后的风险。 其次,我善于发现问题和解决问题。在测试过程中,我不仅能找出软…

墨西哥:海外新闻稿媒体分发-海外pr发稿干货分享-大舍传媒

大舍传媒:海外新闻稿媒体分发平台 墨西哥观查者 (mexicoviewer) 墨西哥观查者是墨西哥一家知名的新闻媒体平台,该平台专注于报道墨西哥国内外的时事新闻、政治、经济、文化等多个领域的内容。其更新速度快,报道对象广泛,深受墨西…

快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印?

快团团开团大团长和帮卖团长如何合并“收件人信息相同的订单”核销打印? 一、背景 经营方式为线下自提等无需快递的团长,在核销打印订单时,需要将“收件人信息相同的订单”合并核销打印 二、操作说明 第一步,团长电脑端登陆快…

streamlit table转置显示

streamlit table转置显示,并且原始的表头放在最左侧 原始表格 代码 import streamlit as st import pandas as pd# 创建一个示例 DataFrame data {Column1: [1, 2, 3],Column2: [4, 5, 6],Column3: [7, 8, 9] } df pd.DataFrame(data)# 转置 DataFrame transposed_df df.T…

W外链怎么样,他们家的短网址免费的吗?

W外链作为短网址服务的一种,体现了短网址技术的现代发展趋势,它不仅提供了基础的网址缩短功能,还扩展了一系列高级特性和增值服务,以适应更广泛的市场需求。根据相关参考内容,W外链具有以下特点和优势: 短域…

Text Control 控件教程:在 .NET 中打印 MS Word DOCX 文档

虽然有用于创建 DOCX 文件的库(例如 Open XML SDK),但打印又是另一回事。打印 DOCX 文件的唯一方法是在 Microsoft Word 中打开它并手动打印。对于需要打印大量文档的 Web 应用程序或需要自动打印文档的服务器端应用程序来说,这不…

将直流电转换为交流电:逆变器的基本原理

什么是逆变器? 大多数电源设计都包括一个称为整流器的部分,该整流器将输入的交流波转换为不稳定的直流电压。但是,我们不能总是依赖来自建筑物主电源的交流输入到我们的系统中。 逆变器是一种将直流电 (DC) 转换为交…

前端八股文 跨域

前端跨域和常见解决方案 一、什么是跨域 同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的 资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 有一点必须要注意:跨域并不是请求发不…

青岛外贸建站公司wordpress网站模板

电子数码wordpress网站模板 电子数码wordpress网站模板,做数码电子的生产厂家或外贸公司官方网站模板。 https://www.jianzhanpress.com/?p3161 金属不锈钢wordpress外贸主题 适合从事金属不锈钢生产、加式或做外贸的公司,简洁wordpress外贸主题模板…

【粉丝福利 | 第8期】值得收藏!推荐10个好用的数据血缘工具

⛳️ 写在前面参与规则!!! ✅参与方式:关注博主、点赞、收藏、评论,任意评论(每人最多评论三次) ⛳️本次送书1~4本【取决于阅读量,阅读量越多,送的越多】 目前市面上绝…

微信公众平台、公众号、小程序联动

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 微信公众平台、公众号、小程序联动 如何通过unionid获取到微信公众openid如何根据code获取微信公…

阿里云登陆Centos7

用自己电脑登陆Centos7太麻烦了,还要自己弄个虚拟机,一个电脑里面既有WIN又有LINUX,索性直接买个阿里云服务器,来学习Centos7。 购买 我是新用户,可以试用3个月,先用个3个月再说哈哈哈。 一系列操作之后…

记一次 .NET某酒业业务系统 崩溃分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序每次关闭时就会自动崩溃,一直找不到原因让我帮忙看一下怎么回事,这位朋友应该是第二次找我了,分析了下 dump 还是挺经典的,拿出来给大家分享一下吧。 …

如何在Vue中实现拖拽功能?

Vue.js是一款流行的JavaScript框架,用于构建用户界面。其中一个常见的需求是在Vue中实现拖拽功能,让用户可以通过拖拽元素来进行交互。今天,我们就来学习如何在Vue中实现这一功能。 首先,我们需要明白拖拽功能的基本原理&#xf…

51单片机嵌入式开发:6、 STC89C52RC 定时器0-1-2-看门狗 操作

STC89C52RC 定时器0-1-2-看门狗 操作 1 定时器介绍1.1 定时器概述1.2 课程思路 2 定时器类型2.1 定时器0、12.2 定时器22.3 看门狗定时器2.4 中断介绍 3 定时器操作3.1 定时器0操作3.2 定时器1操作3.3 定时器2操作3.4 看门狗定时器操作 4 定时器总结 1 定时器介绍 1.1 定时器概…

layui项目中的layui.define、layui.config以及layui.use的使用

第一步:创建一个layuiTest项目,结构如下 第二步:新建一个test.js,利用layui.define定义一个模块test,并向外暴露该模块,该模块里面有两个方法method1和method2. 第三步:新建一个test.html,在该页面引入layui.js&#x…

Loadlibrary failed with error 87:参数错误

问题描述: win10 系统在安装 Photoshop 2022 版后,点击桌面图标提示:Loadlibrary failed with error 87:参数错误,反复出现,反复确定,直至软件关闭。 解决方法: 1. 找到 C:\Window…

共筑智能未来 | 思腾合力闪耀2024世界人工智能大会(WAIC 2024)

在刚刚结束的2024世界人工智能大会暨人工智能全球治理高级别会议(WAIC 2024)上,思腾合力作为行业领先的人工智能基础架构解决方案提供商,凭借卓越的产品和解决方案,成为展会上的亮点之一。此次盛会不仅展示了全球人工智…