我在使用LL库中配置ADC用DMA模式传输数据,双通道采样电压值,为什么仿真出来的结果会是叠加的,而且值不能最低不能为0,最低为0x0800(上下波动一点),输入一个AI,最大值为0X0BFF,输入两个AI才会到0X0FFF,也就是AI1和AI2通道单独输入可以都能读取0X0800~0X0BFF的值,但是一起输入在DMA内存地址的数组中就会将两者的值叠加?这是为什么?有大佬能帮忙看看嘛?
STM32单片机源程序如下:
- LL_ADC_EnableInternalRegulator(ADC3);//
- //ADC3采样通道等初始化
- ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B;//设置ADC分辨率(12位)
- ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;//设置ADC转换数据对齐(右对齐)
- ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE;
- LL_ADC_Init(ADC3, &ADC_InitStruct);
-
- ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
- ADC_REG_InitStruct.SequencerLength = LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS;
- ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
- ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_CONTINUOUS
- ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_UNLIMITED;
- ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN
- LL_ADC_REG_Init(ADC3, &ADC_REG_InitStruct);
-
-
- LL_ADC_SetGainCompensation(ADC3, 0)
- LL_ADC_SetOverSamplingScope(ADC3, LL_ADC_OVS_DISABLE)
- LL_ADC_DisableDeepPowerDown(ADC3)
-
- ADC_CommonInitStruct.CommonClock = LL_ADC_CLOCK_ASYNC_DIV4;
- ADC_CommonInitStruct.Multimode = LL_ADC_MULTI_INDEPENDENT;
- LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC3), &ADC_CommonInitStruct);
- LL_ADC_EnableIT_EOS(ADC3);
- LL_ADC_DisableIT_EOC(ADC3);
- /** Configure Regular Channel
- */
- LL_ADC_REG_SetSequencerRanks(ADC3, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1;
- LL_ADC_SetChannelSamplingTime(ADC3, LL_ADC_CHANNEL_1, LL_ADC_SAMPLINGTIME_92CYCLES_5);
- LL_ADC_SetChannelSingleDiff(ADC3, LL_ADC_CHANNEL_1, LL_ADC_SINGLE_ENDED);
- /** Configure Regular Channe5
- */
- LL_ADC_REG_SetSequencerRanks(ADC3, LL_ADC_REG_RANK_2, LL_ADC_CHANNEL_5);
- LL_ADC_SetChannelSamplingTime(ADC3, LL_ADC_CHANNEL_5, LL_ADC_SAMPLINGTIME_92CYCLES_5);
- LL_ADC_SetChannelSingleDiff(ADC3, LL_ADC_CHANNEL_5, LL_ADC_SINGLE_ENDED);
- ActivateAdc3();//包含ADC3使能
-
- StartAdc3ConvPoll();
- ADCSoftConversion();//添加调用此函数,ADC软件触发
复制代码 这是输入一个AI到10V的值:
这是两个AI都到10V的值:
而且,AI1FilterResult和AI2FilterResult分别对应DMA内存数组中的第一、二个数据之后的处理之后的值,只有AI1FilterResult又值,而AI2FilterResult一直为0,这又是为什么啊?????
|