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        6static 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 -  A0adc1DMAValue[1] =  (uint16_t)(adc123DMAValue[1]>>16);    // PA1  IN1 -  A1         adc1DMAValue[2] =  (uint16_t)(adc123DMAValue[0]>>16);      // PA4  IN4 -  A2adc1DMAValue[3] =  (uint16_t)(adc123DMAValue[2]);         // PB0 IN8 -  A3adc1DMAValue[4] =  (uint16_t)adc123DMAValue[1];          // PC1 N11  - A4adc1DMAValue[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.rhkb.cn/news/372428.html

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

相关文章

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息,消息源 Evan Blass 今天在 X 平台发布推文,分享了小米 MIX Fold 4 折叠屏手机的高清渲染图(图片有加工成分在,最终零售版本可能会存在差异…

70.WEB渗透测试-信息收集- WAF、框架组件识别(10)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:69.WEB渗透测试-信息收集- WAF、框架组件识别(9) 关于waf相应的识…

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系? 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝? 2. 赋值运算符只能重载成类的…

【Elasticsearch】开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch

开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch 1.历史发展2.OpenSearch 与 Elasticsearch 相同点3.OpenSearch 与 Elasticsearch 不同点3.1 版本大不同3.2 许可证不同3.3 社区不同3.4 功能不同3.5 安全性不同3.6 性能不同3.7 价格不同3.8 两者可相互导入 4…

unity知识点 专项四 一文彻底说清楚(锚点(anchor)、中心点(pivot)、位置(position)之间的关系)

一 概述 想要使UI控件在屏幕中达到正确的显示效果,比如自适应屏幕尺寸、固定边距等等,首先要理清楚几个基本概念和设置:锚点(anchor)、中心点(pivot)、位置(position)、UI缩放模式、父物件的transform设置 二 Anchor、Pivot与Position 2…

Javascript常见数据结构和设计模式

在JavaScript中,常见的数据结构包括两大类:原始数据类型(Primitive Types)和对象类型(Object Types)。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…

Vulnhub靶场DC-6练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. wordpress扫描2. wordlists字典爆破 0x03 漏洞查找与利用1. 漏洞查找2. CVE-2018-15877漏洞利用3. 反弹shell5. nmap提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-6.zip 介绍&#…

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像(INIRS)作为一种非侵入性脑功能成像技术,为研究大脑活动提供了一种高效、生态效度高的方法。然而,为了充分利用INIRS技术并确保实验结果的准确性和可靠性,研究者必须精心设计实…

高阶面试-dubbo的学习

SPI机制 SPI,service provider interface,服务发现机制,其实就是把接口实现类的全限定名配置在文件里面,然后通过加载器ServiceLoader去读取配置加载实现类,比如说数据库驱动,我们把mysql的jar包放到项目的…

【库架一体立体库】与【传统立体库】对比

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 随着冷链物流行业的快速发展,对于冷藏设施的要求也在不断提高。库架一体式智能立体冷藏库以其高效、节能、智能化的特点,正逐渐成为行业发展的新趋势。 分享一…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外,用例之间也存在着一定的关系,如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系,其中一个用例(称为基本用例,Base Use Case)的行为包…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…

理解JS与多线程

理解JS与多线程 什么是四核四线程? 一个CPU有几个核它就可以跑多少个线程,四核四线程就说明这个CPU同一时间最多能够运行四个线程,四核八线程是使用了超线程技术,使得单个核像有两个核一样,速度比四核四线程有多提升。…

Vivado FFT IP核使用

1. 今日摸鱼任务 学习Vivado FFT IP核的使用 Vivado_FFT IP核 使用详解_vivado fft ip核-CSDN博客 这篇写的很详细啦 简单做一点笔记进行记录 2. FFT IP核 xfft_0 ff (.aclk(aclk), // input wire aclk.aresetn(aresetn)…

C++编译链接原理

从底层剖析程序从编译到运行的整个过程 三个阶段 一、编译阶段二、链接阶段三、运行阶段 为了方便解释,给出两端示例代码,下面围绕代码进行实验: //sum.cpp int gdata 10; int sum(int a,int b) {return ab; }//main.cpp extern int gdata…

Java基础---复习01

main方法 一个程序有且只有一个main方法,main方法是java程序的唯一入口。 修饰符 修饰类修饰方法修饰域public都可以访问都可以访问private私有类只能本类只能本类protected子类可以继承、访问,同包下的类也可以访问子类可以继承、访问,同…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型,旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型,展现出…

暑期备考2024小学生古诗文大会:吃透真题和知识点(持续)

2024年上海市小学生古诗文大会的自由报名初赛将于10月19日(星期六)正式开始,还有3个多月的时间。 为帮助孩子们备考,我持续分享往年上海小学生古诗文大会真题,这些题目来自我去重、合并后的1700在线题库,每…

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下,挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前,Blender与KeyShot作为业界领先的全能渲染解决方案,广受推崇。它们虽皆能创造出令人信服的逼真视觉效果,但在特色功能上各有所长。本篇文章旨在…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习?二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习? 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到使用算…