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);
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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询