STM32F4 ADC模块使用不同DMA模式的区别和对比

STM32F4 ADC模块使用不同DMA模式的区别和对比,第1张

这些细节在STM32F4的原厂参考手册中没有说明,只是很简短的列了一下。

我是查看ST前几天刚发布的接口库才最后弄明白的,不敢独享!

1、STM32F4有3个独立的ADC单元,性能强劲,可以独立使用,也可以联合使用它们。

联合使用在参考手册中叫Interleave模式,最大的目的是加倍提升采样速度

2、采样速度大幅提高以后,就需要使用DMA来配合提取采样结果,从而发挥STM32F4

ADC模块的最大效能。

3、ADC模块使用DMA有4种模式可选,默认模式和模式1没有什么特别之处。

最有意思的是模式2和模式3:

模式2可以选择多达3个ADC模块工作于Interleave模式,ADC速度从单一模块的

24Msps暴涨为72Msps,而且还是12-bit的分辨率!唯一的要求是每完成2次转换,

允许DMA一次性取走2个采样值。

模式3跟模式2类同,但要求ADC模块的采样率为8-bit或6-bit,由于转换时间要比

12-bit时短,所以速度更快,适用于速度要求更快,但精度要求较低的场合。

比如用2个ADC模块很容易就可以做到6Msps的速率,而且2次的结果可以存为halfword,

经由DMA取走,耗用内存也比模式2来的少。

剩下的那一个ADC模块也不用闲着,可以工作于其他设定(比如:高精度)的模式。

假设你你的ADC_value[2000],如果DMA工作于单次方式,那么装满2000个数据后DMA就停止工作了,除非你重置DMA的CNDTR寄存器。

如果工作于循环方式,DMA在填充ADC_value[1999]后,又回到ADC_value[0]重新开始填充,周而复始。

程序中使用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连续转换模式解决数据错位的办法,请指教

EALLOW;

GpioCtrlRegsGPAMUX1bitGPIO0 = 1; // GPIO0 = ePWM1A

GpioCtrlRegsGPAMUX1bitGPIO1 = 1; // GPIO0 = ePWM1B

GpioCtrlRegsGPAMUX1bitGPIO2 = 1; // GPIO0 = ePWM2A

GpioCtrlRegsGPAMUX1bitGPIO3 = 1; // GPIO0 = ePWM2B

以上就是关于STM32F4 ADC模块使用不同DMA模式的区别和对比全部的内容,包括:STM32F4 ADC模块使用不同DMA模式的区别和对比、STM32F103采用ADC+DMA传输,ADC值正确,DMA传输后12位AD的前四位丢掉了、求助,关于STM8L051F3芯片,多路ADC采集DMA传输遇到的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/10148543.html

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

发表评论

登录后才能评论

评论列表(0条)

保存