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

 我来答
伊璎0J7ae6
2016-08-02 · TA获得超过744个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:189万
展开全部
我用的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);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式