stm32 adc多通道采集 使用dma 为什么只显示一个通道的值

如题所述

我用的STM32F051,adc 6通道dma采样,一开始也遇到这个问题,有5处地方要注意:

1、 DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;循环模式

2、DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
3、ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; //ADC1 in continous mode

4、ADC_ChannelConfig(ADC1,ADC_Channel_0|ADC_Channel_5|ADC_Channel_6|ADC_Channel_7|ADC_Channel_16|ADC_Channel_17 , ADC_SampleTime_55_5Cycles);

/* ADC DMA request in circular mode */
5、 ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
这5个地方如果配置正确,那么就能采集到循环数据

按照顺序配置,先配置端口→配置DMA→配置ADC→配置通道ADC_ChannelConfig()→ADC校准→允许DMA→配置循环模式 ADC_DMARequestModeConfig()→允许ADC DMA→允许ADC→启动转换ADC_StartOfConversion(ADC1) 。
大体步骤就是这样,贴出来给遇到类似问题的朋友参考。

//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
//发现一个STM32F051的bug,不能够分开配置采样通道顺序和时间
// {
// uint8_t ucnt = 0;
// for(; ucnt < ADC_NUM_CNT; ucnt++)//
// {
// /* Convert the ADC1 with 55.5 Cycles as sampling time */
// ADC_ChannelConfig(ADC1, adc1_channel_gather[ucnt] , ADC_SampleTime_55_5Cycles);
// }
// }

这样配置就没有问题: ADC_ChannelConfig(ADC1,ADC_Channel_0|ADC_Channel_5|ADC_Channel_6|ADC_Channel_7|ADC_Channel_16|ADC_Channel_17 , ADC_SampleTime_55_5Cycles);
温馨提示:内容为网友见解,仅供参考
无其他回答

stm32 adc多通道采集 使用dma 为什么只显示一个通道的值
一个ADC就是一个转换电路。多通道其实是通过将这个电路的输入与不同引脚连接。所以只有一个通道的值是对的。你可以查询一下STM32F10x参考手册,有中文版

stm32 adc多通道采集 使用dma 为什么只显示一个通道的值
5、 ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);这5个地方如果配置正确,那么就能采集到循环数据 按照顺序配置,先配置端口→配置DMA→配置ADC→配置通道ADC_ChannelConfig()→ADC校准→允许DMA→配置循环模式 ADC_DMARequestModeConfig()→允许ADC DMA→允许ADC→启动转换ADC_StartOfConversio...

stm32 adc多通道采集 使用dma 为什么只显示一个通道的值
设置好采集顺序,dma会先发送先采集的通道的数据,后发送后采集的通道的数据,

STM32CubeMX配置-ADC多通道配置(DMA)
在ADC配置中,要确保相关DMA通道被正确配置。配置引脚:确保ADC的输入引脚连接正确,这对于数据采集至关重要。在实际编程中,需要在代码中手动启动ADC采集,例如使用以下函数:HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC1_Value, 6);这将启动ADC并利用DMA传输数据到指定内存地址。最后,别忘了配置...

STM32之ADC通道顺序设置
STM32F10X系列MCU的说明文档中对ADC通道顺序设置上说的比较简单,在做多通道采集项目且用DMA作为数据传输时,若是没有设置好通道顺序,那么有些通道的数据可能会采集不到,本人在做ADC实验时就遇到此问题,因此写下来作为总结 在使用STM32的ADC多通道采样时,需要为每一个使用到的通道配置对应的转换顺序...

stm32中ADC如何使用?
stm32 ADC的通道与引脚是对应关系如下:通道0对应PA0,通道1对应PA1,通道2对应PA2,通道3对应PA3,以此类推。PA0这个脚,default选项中有 ADC123_IN0,这个表示PA0做ADC采集引脚时,可以使用ADC1、2、3模块的通道0。同样,PA1的ADC123_IN1,表示PA1可以做ADC1、2、3模块的通道1。特别的,PB0...

STM32U5 ADC+DMA配置演示
首先,我们以ADC1为例进行标准请求模式的配置演示。选取ADC1的四个通道,设置为扫描模式与连续转换,通过DMA传输转换结果,并让DMA工作在外设字到内存字的循环传输模式。配置过程中,使用CubeMx进行初始化,确保DMA通道的正确设置。实际代码中,运行结果显示已成功获取四个通道的转换数据。接着,我们转向ADC...

stm32串口收发数据为什么使用dma?
本次学习共有两个程序。第一个为DMA数据转运,使用DMA进行存储器到存储器的数据转运,即把一个数组里的数据复制到另一个数组里。 第二个为DMA+AD多通道,一、DMA简介1.概述1、DMA(Direct Memory Access)直接存储器存取或访问。从名字看,DMA这个外设可以直接访问STM32内部的存储器,包括运行内存SRAM...

STM32F072多通道ADC采集,两路数据相同怎么解决
DMA: 每个通道转换完成都发出一个 DMA request, 可设定为每当 DMA 发生就触发一次中断,即可读出每个通道所转换的值,也可以全部转换後一次读取全部通道的值。Injected group 最多 4 个通道,且只能设为等待触发而转换。(插队)触发时若正在转换规则通道则会暂停而先处理注入通道,完毕後恢复原运作。如...

STM32 ADC多通道转换详解(附源代码)
STM32ADC多通道转换描述:通过ADC连续采集11路模拟信号,并由DMA传输至内存。配置ADC为扫描并连续转换模式,设置ADC时钟为12MHZ。每次转换完成,DMA循环将数据传输至内存。ADC可连续采集N次以计算平均值。最终,通过串口输出最终转换结果。程序如下:为大家提供以下资料供参考:- ADC读取光照传感器 - 深度...

相似回答