关于STM32 ADC时采用DMA的一点疑问

发布者:心愿成真最新更新时间:2024-10-25 来源: cnblogs关键字:STM32  ADC  DMA 手机看文章 扫描二维码
随时随地手机看文章

手册上有这样的话:只有ADC1能够产生DMA请求,似乎是只有ADC通道1能采用DMA方式传输数据。


但是万利的开发板上的ADC例子,用的是ADC通道10,还用了DMA 方式传数据。

所以我猜测  “只有ADC1能够产生DMA请求”中提到的ADC1 并不是指ADC 通道1,
而是软件可配置的 ADC 通道的分类形式,可分为ADC1和ADC2.
      我们可将 通道10(或其他)配置成ADC1 “模式”。通过函数
/* ADC1 regular channel10 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
实现

 

来自芯片手册:
注:
– ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。
– ADC2的模拟输入通道16和通道17在芯片内部连到了VSS。   

来自网友评论:
stm32的ADC2 问题
stm32的ADC2是 不是可以用DMA方式,怎么用???我看手册里只有ADC1有DMA功能,如果ADC1和ADC2同时规则采集16个通道,DMA怎么用呢????

是的,只有ADC1有DMACEDN论坛3 r1 C' j$ N6 y$ l% c
但是你的16个通道都可以使用ADC1处理,那也不是16个通道都能用DMA方式了吗


原来如此啊:
来自STM32F103 的另一份手册:
ADC(模拟/数字转换器)
STM32F103xx增强型产品内嵌2个12位的模拟/数字转换器(ADC),每个ADC有多达16个外部通道,可以实现单次或扫描转换。在扫描模式下,转换在选定的一组模拟输入上自动进行。
ADC接口上额外的逻辑功能允许:

同时采样和保持

交叉采样和保持

单次采样
ADC可以使用DMA操作。
模拟看门狗功能允许非常精准地监视一路、多路或所有选中的通道,当被监视的信号超出预置的阀值时,将产生中断。
由标准定时器(TIMx)和高级控制定时器(TIM1)产生的事件,可以分别内部级联到ADC的开始触发、外部触发和DMA触发,以使应用程序能同步AD转换和时钟。


关于它的双ADC 模式

16.10 双ADC模式
在有2 个ADC的器件中,可以使用双ADC模式(见图148双ADC框图)。
在双ADC 模式里,根据ADC1_CR1 寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1 主和ADC2 从的交替触发或同时触发。

注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。但是,主和从ADC的外部触发必须同时被激活。

关键字:STM32  ADC  DMA 引用地址:关于STM32 ADC时采用DMA的一点疑问

上一篇:二 STM32 CAN 波特率的确定
下一篇:STM32中断使用笔记

推荐阅读最新更新时间:2026-03-25 11:08

stm32 ,DMA,adc,fft. . .(基于库函数)
用TIM2定时器触发adc,DMA采集之后进行fft转换. fft是一种快速傅里叶算法. 官方给的256点运算时间仅需要0.362ms,1024点也只要2.138ms(72mHz) 傅里叶变换就像是将一桶各个颜色混杂在一起的油漆分离出来.并将每种颜料的含量也计算出来. 而各种颜色代表了各种频率,含量代表幅值.(个人的浅显理解) 了解个差不多就可以开始了~ 先将fft的官方库添加到自己的工程.(https://pan.baidu.com/s/1Gw1NXCa3q8SHxc-E1H-6yw 提取码:m1et) 添加之后可以看到官方提供了两种快速傅里叶变换函数,分别为256点和1024点.这里视自己情况进行使用.不过要注意在这之前要调用
[单片机]
关于STM32 ADC时采用DMA的一点疑问
手册上有这样的话:只有ADC1能够产生DMA请求,似乎是只有ADC通道1能采用DMA方式传输数据。 但是万利的开发板上的ADC例子,用的是ADC通道10,还用了DMA 方式传数据。 所以我猜测 “只有ADC1能够产生DMA请求”中提到的ADC1 并不是指ADC 通道1, 而是软件可配置的 ADC 通道的分类形式,可分为ADC1和ADC2. 我们可将 通道10(或其他)配置成ADC1 “模式”。通过函数 /* ADC1 regular channel10 configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_5
[单片机]
stm32 嵌入式开发 中ADC独立多通道DMA传输数据实验总结
主要知识点: DMA 数据传输 串口传输 通道引脚初始化 (一)、DMA 数据传输            1、外设到存储器传输            2、存储器到外设传输            3、存储器到存储器传输     外设一般为:ADC、SPI、I2C等。 存储器一般为:片内SRAM、外部存储器、片内FLASH等   DMA功能框图:8个流通道(DMA_SxCR ),每个流通到对应8个外设请求(CHSEL )     DMA 请求映射:分两种 DMA1请求映射、DMA2请求映射    特点:每一个外设请求只占用一个数据流通道,相同的外设请求可以占用不同的通道请求。       当该数据流通道
[单片机]
<font color='red'>stm32</font> 嵌入式开发 中<font color='red'>ADC</font>独立多通道<font color='red'>DMA</font>传输数据实验总结
STM32ADC简介_DMA方式的程序设计与实现
ADC简介: ADC(Analog-to-Digital Converter,模/ 数转换器)。也就是将模拟信号转换为数字信号进行处理,在存储或传输时,模数转换器几乎必不可少。 STM32在片上集成的ADC外设非常强大,我使用的奋斗开发板是STM32F103VET6,属于增强型的CPU,它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次,连续,扫描或间断模式执行,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 ADC工作过程分析: 我们以ADC规则通道转换过程来分析,如上图,所有的器件都是围绕中间的模拟至数字转换器部分展开的。它的左端VREF+,VREF- 等ADC参考电压,ADCx
[单片机]
<font color='red'>STM32</font>的<font color='red'>ADC</font>简介_<font color='red'>DMA</font>方式的程序设计与实现
STM32单片机实现DMA+ADC+UART功能
突然想测试一下STM32单片机ADC采样速率问题,按照常规方法,可以通过ADC采样,然后将采样值打印出来。但是这种方法在处理和打印数据的时候会占用很多时间,导致处理数据的时间超过了ADC的采样时间。于是想到了ADC采样的数据用DMA功能存储,并通过串口打印。但是串口打印依然要占用单片机时间,那能不能串口数据的输出也采用 DMA功能呢?这样ADC采样的数据通过DMA直接存储,然后串口通过DMA功能直接输出采样到的数据。这样速度程序执行速度不就极大的提升了吗?说干就干,使用STM32F103C8T6单片机,标准库函数,keil5软件,编写一个测试程序。 首先实现ADC采样并通过DMA存储 #ifndef __ADC_H #de
[单片机]
<font color='red'>STM32</font>单片机实现<font color='red'>DMA</font>+<font color='red'>ADC</font>+UART功能
STM32笔记--ADC(DMA方式)
在上一次的博客中重新学习了DMA,这次我们便学以致用了,ADC的概念想必大家都是十分清楚了,模拟转数字,可以用在测信号,测电压,在我们的生活中有着十分巨大的作用,这次我们就来看看ADC又有哪些操作吧! ADC流程,首先ADC采集一个信号(信号范围大都为0-3.3V,ps:3.3V可通过更改Vref寄存器修改),每隔相同时间菜一次数值发送到一个可变16位数中,下面是我们的数组定义: __IO uint16_t ADC_ConvertedValue; //定义该16位数用来传输数据,原因是我们使用的12位AD,由于寄存器的定义方便,因此使用16位数 下面是ADC的初始化和配置代码: void ADC1_Init(void
[单片机]
基于STM32单片机的ADCDMA配置的介绍与使用
本文使用ADC转换电位器输出的电压值,并用DMA模式传输转换的结果,每8次采样转换取平均值,做一个简单的数字滤波。 ADC的详细配置与使用 见之前的日记STM32中ADC的使用,只是最后增加一步配置DMA: DMA for ADC channels features configuration To enable the DMA mode for ADC channels group, use the ADC_DMACmd()funcTIon. To configure the DMA transfer request, use ADC_DMAConfig() func TI on. DMA的配置 (摘自STM32F3官
[单片机]
基于<font color='red'>STM32</font>单片机的<font color='red'>ADC</font>与<font color='red'>DMA</font>配置的介绍与使用
stm32 hal库ADC - DMA方式中断问题
希望用DMA去读取电压,但是每次转化完成后都会调用回调函数,这样太浪费CPU了,解决办法如下: http://www.stmcu.org.cn/module/forum/thread-615792-1-1.html cube默认是开启了中断,但是只要调用 HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn); 把中断关闭即可
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved