多通道转换时的值比单通道转换时的值要小0.2V左右,并且通道越多,值越小,4通道转换时比单通道将近小一半?
什么原因啊,
我用的DMA方式缓存建立了一个 ADCConvertedValue[10][4];,DMA深度为10,
在DMA中断里
void DMA1_Channel1_IRQHandler(void)
{
if(DMA1_IT_TC1 != RESET)
{
u8 i,j;
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,DISABLE);
/*关掉ADC的DMA*/
// ADC_DMACmd(ADC1,DISABLE);
DMA_ClearITPendingBit(DMA1_IT_TC1);
ADC_Display_Flag = 1;
for(i= 0; i < DMA_count; i++)//行
{
for(j =0 ;j < ADC_count; j++)//列
ADCConvertedValueLocal[j] = ADCConvertedValue[j];
}
/*使能ADC的DMA*/
// ADC_DMACmd(ADC1,ENABLE);
}
}
读走了缓存的数据,
这是DMA配置方式
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel1);//
/*DMA外设取数据基址*/
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_ADDRESS;
/*DMA内存基址*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADCConvertedValue;
/*外设作为数据来源还是目的地*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//sooucre
/*指定DMA缓存大小*/
DMA_InitStructure.DMA_BufferSize = DMA_count;//深度为10
/*外设地址寄存器递增与否*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*内存地址递增与否 */
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*DMA外设数据宽度*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
/*DMA外设数据宽度*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
/*DMA设置了CAN的工作模式*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; //DMA_Mode_Circular ,DMA_Mode_Normal
/*设定DMA通道x的优先级*/
DMA_InitStructure.DMA_Priority = DMA_Priority_High ;
/*使能DMA通道的内存到内存传输*/
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
/*配置DMA中断部分*/
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);
}
您好,您的ADC单通道和多通道DMA采集数据不准的问题解决了吗,我也遇到了类似问题,望赐教~