stm32 非DMA方式 多路ADC ADC1,ADC3两种方式求助

stm32 非DMA方式 多路ADC ADC1,ADC3两种方式求助,第1张

可以检测16处电压。。但是。。但是……不能同时检测。。。

比如如果只是采用adc1的话,要一个一个按顺序来,用库写程序的话有一句

ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 1,ADC_SampleTime_1Cycles5)

里面那个1表示在这一次周期的采样顺序,采样3个点就是

ADC_RegularChannelConfig(ADC1,ADC_Channel_3, 1,ADC_SampleTime_1Cycles5)

ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 2,ADC_SampleTime_1Cycles5)

ADC_RegularChannelConfig(ADC1,ADC_Channel_5, 3,ADC_SampleTime_1Cycles5)

其中的那个1,2,3就是顺序

如果用adc1和adc2的话是可以同时采样的……

但是只用1个adc的话16处采样的返回值只写在对应的ADC_DR里面,需要分时读取;

同样,adc1和adc2是有各自不同的adc_dr;

读取,可以通过dma传出来读取。在dma的设置里有关于adc的……

或者在库函数里也有直接读取的。。

或者。。直接去读寄存器也可以……

程序中使用ADC1采样一个外部输入,一个内部参考电压的

电压,其中出现了两通道的数据错位问题,即有时数组第

一个数与该数组第二个数据交换了,在网上找了很久=都

没神马结果,最后只能将ADC的连续转换模式设置成单次转换

即ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_1)改成

ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1)

在每次一组数据传 输完成产生一次DMA中断的时候再启动下

一次adc转换。这样数据才不至于错位。

***最后,如果读者有一些在adc连续转换模式解决数据错位的办法,请指教***


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11340372.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存