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

\u5173\u4e8estm32 adc \u67e5\u8be2\u8ddfDMA\u65b9\u5f0f

ADC_InitStructure.ADC_ScanConvMode = ENABLE;//\u626b\u63cf\u65b9\u5f0f,\u8fd9\u4e2a\u4e00\u5b9a\u8981\u6253\u5f00
ADC_RegularChannelConfig(ADC1, ADC_Channel_0 , 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5);
\u8bbe\u7f6e\u597d\u91c7\u96c6\u987a\u5e8f\uff0cdma\u4f1a\u5148\u53d1\u9001\u5148\u91c7\u96c6\u7684\u901a\u9053\u7684\u6570\u636e\uff0c\u540e\u53d1\u9001\u540e\u91c7\u96c6\u7684\u901a\u9053\u7684\u6570\u636e\u3002

\u3000\u3000\u8fd9\u4e9b\u7ec6\u8282\u5728STM32F4\u7684\u539f\u5382\u53c2\u8003\u624b\u518c\u4e2d\u6ca1\u6709\u8bf4\u660e\uff0c\u53ea\u662f\u5f88\u7b80\u77ed\u7684\u5217\u4e86\u4e00\u4e0b\u3002
\u3000\u3000\u6211\u662f\u67e5\u770bST\u524d\u51e0\u5929\u521a\u53d1\u5e03\u7684\u63a5\u53e3\u5e93\u624d\u6700\u540e\u5f04\u660e\u767d\u7684\uff0c\u4e0d\u6562\u72ec\u4eab\uff01
\u3000\u30001\u3001STM32F4\u67093\u4e2a\u72ec\u7acb\u7684ADC\u5355\u5143\uff0c\u6027\u80fd\u5f3a\u52b2\uff0c\u53ef\u4ee5\u72ec\u7acb\u4f7f\u7528\uff0c\u4e5f\u53ef\u4ee5\u8054\u5408\u4f7f\u7528\u5b83\u4eec\u3002
\u3000\u3000\u8054\u5408\u4f7f\u7528\u5728\u53c2\u8003\u624b\u518c\u4e2d\u53ebInterleave\u6a21\u5f0f\uff0c\u6700\u5927\u7684\u76ee\u7684\u662f\u52a0\u500d\u63d0\u5347\u91c7\u6837\u901f\u5ea6\u3002
\u3000\u30002\u3001\u91c7\u6837\u901f\u5ea6\u5927\u5e45\u63d0\u9ad8\u4ee5\u540e\uff0c\u5c31\u9700\u8981\u4f7f\u7528DMA\u6765\u914d\u5408\u63d0\u53d6\u91c7\u6837\u7ed3\u679c\uff0c\u4ece\u800c\u53d1\u6325STM32F4
\u3000\u3000ADC\u6a21\u5757\u7684\u6700\u5927\u6548\u80fd\u3002
\u3000\u30003\u3001ADC\u6a21\u5757\u4f7f\u7528DMA\u67094\u79cd\u6a21\u5f0f\u53ef\u9009\uff0c\u9ed8\u8ba4\u6a21\u5f0f\u548c\u6a21\u5f0f1\u6ca1\u6709\u4ec0\u4e48\u7279\u522b\u4e4b\u5904\u3002
\u3000\u3000\u6700\u6709\u610f\u601d\u7684\u662f\u6a21\u5f0f2\u548c\u6a21\u5f0f3\uff1a
\u3000\u3000\u6a21\u5f0f2\u53ef\u4ee5\u9009\u62e9\u591a\u8fbe3\u4e2aADC\u6a21\u5757\u5de5\u4f5c\u4e8eInterleave\u6a21\u5f0f\uff0cADC\u901f\u5ea6\u4ece\u5355\u4e00\u6a21\u5757\u7684
\u3000\u30002.4Msps\u66b4\u6da8\u4e3a7.2Msps\uff0c\u800c\u4e14\u8fd8\u662f12-bit\u7684\u5206\u8fa8\u7387\uff01\u552f\u4e00\u7684\u8981\u6c42\u662f\u6bcf\u5b8c\u62102\u6b21\u8f6c\u6362\uff0c
\u3000\u3000\u5141\u8bb8DMA\u4e00\u6b21\u6027\u53d6\u8d702\u4e2a\u91c7\u6837\u503c\u3002
\u3000\u3000\u6a21\u5f0f3\u8ddf\u6a21\u5f0f2\u7c7b\u540c\uff0c\u4f46\u8981\u6c42ADC\u6a21\u5757\u7684\u91c7\u6837\u7387\u4e3a8-bit\u62166-bit\uff0c\u7531\u4e8e\u8f6c\u6362\u65f6\u95f4\u8981\u6bd4
\u3000\u300012-bit\u65f6\u77ed\uff0c\u6240\u4ee5\u901f\u5ea6\u66f4\u5feb\uff0c\u9002\u7528\u4e8e\u901f\u5ea6\u8981\u6c42\u66f4\u5feb\uff0c\u4f46\u7cbe\u5ea6\u8981\u6c42\u8f83\u4f4e\u7684\u573a\u5408\u3002
\u3000\u3000\u6bd4\u5982\u75282\u4e2aADC\u6a21\u5757\u5f88\u5bb9\u6613\u5c31\u53ef\u4ee5\u505a\u52306Msps\u7684\u901f\u7387\uff0c\u800c\u4e142\u6b21\u7684\u7ed3\u679c\u53ef\u4ee5\u5b58\u4e3ahalfword\uff0c
\u3000\u3000\u7ecf\u7531DMA\u53d6\u8d70\uff0c\u8017\u7528\u5185\u5b58\u4e5f\u6bd4\u6a21\u5f0f2\u6765\u7684\u5c11\u3002
\u3000\u3000\u5269\u4e0b\u7684\u90a3\u4e00\u4e2aADC\u6a21\u5757\u4e5f\u4e0d\u7528\u95f2\u7740\uff0c\u53ef\u4ee5\u5de5\u4f5c\u4e8e\u5176\u4ed6\u8bbe\u5b9a\uff08\u6bd4\u5982\uff1a\u9ad8\u7cbe\u5ea6\uff09\u7684\u6a21\u5f0f\u3002

  这些细节在STM32F4的原厂参考手册中没有说明,只是很简短的列了一下。
  我是查看ST前几天刚发布的接口库才最后弄明白的,不敢独享!
  1、STM32F4有3个独立的ADC单元,性能强劲,可以独立使用,也可以联合使用它们。
  联合使用在参考手册中叫Interleave模式,最大的目的是加倍提升采样速度。
  2、采样速度大幅提高以后,就需要使用DMA来配合提取采样结果,从而发挥STM32F4
  ADC模块的最大效能。
  3、ADC模块使用DMA有4种模式可选,默认模式和模式1没有什么特别之处。
  最有意思的是模式2和模式3:
  模式2可以选择多达3个ADC模块工作于Interleave模式,ADC速度从单一模块的
  2.4Msps暴涨为7.2Msps,而且还是12-bit的分辨率!唯一的要求是每完成2次转换,
  允许DMA一次性取走2个采样值。
  模式3跟模式2类同,但要求ADC模块的采样率为8-bit或6-bit,由于转换时间要比
  12-bit时短,所以速度更快,适用于速度要求更快,但精度要求较低的场合。
  比如用2个ADC模块很容易就可以做到6Msps的速率,而且2次的结果可以存为halfword,
  经由DMA取走,耗用内存也比模式2来的少。
  剩下的那一个ADC模块也不用闲着,可以工作于其他设定(比如:高精度)的模式。

这些细节在STM32F4的原厂参考手册中没有说明,只是很简短的列了一下。
我是查看ST前几天刚发布的接口库才最后弄明白的,不敢独享!

1、STM32F4有3个独立的ADC单元,性能强劲,可以独立使用,也可以联合使用它们。
联合使用在参考手册中叫Interleave模式,最大的目的是加倍提升采样速度。

2、采样速度大幅提高以后,就需要使用DMA来配合提取采样结果,从而发挥STM32F4
ADC模块的最大效能。

3、ADC模块使用DMA有4种模式可选,默认模式和模式1没有什么特别之处。
最有意思的是模式2和模式3:

模式2可以选择多达3个ADC模块工作于Interleave模式,ADC速度从单一模块的
2.4Msps暴涨为7.2Msps,而且还是12-bit的分辨率!唯一的要求是每完成2次转换,
允许DMA一次性取走2个采样值。

模式3跟模式2类同,但要求ADC模块的采样率为8-bit或6-bit,由于转换时间要比
12-bit时短,所以速度更快,适用于速度要求更快,但精度要求较低的场合。
比如用2个ADC模块很容易就可以做到6Msps的速率,而且2次的结果可以存为halfword,
经由DMA取走,耗用内存也比模式2来的少。
剩下的那一个ADC模块也不用闲着,可以工作于其他设定(比如:高精度)的模式。

一句话,STM32F4似灰常强滴。。。
更多猛招,敬请留意后续文章。。。

ST的ADC功能确实是比较强的,激活DMA DUAL Circular Buffer以后,可以利用FPU单元的DSP指令配合前台信号采集,在后台同步完成实时信号分析。简单的说,原先要用200MIPS以下的DSP来做的事情,STM32F4都有机会取代,性价比超强。

扩展阅读:cubemx adc stm32l4 ... stm32f407 adc ... stm32f4 adc采样速度 ... stm32单片机电源模块 ... stm32f4型号详解 ... stm32 adc多通道采集 ... stm32f103 dac ... stm32 fdcan配置 ... stm32有多少adc外设 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网