Stm32 我能以多快的速度读取二维阵列的ADC?

Stm32 我能以多快的速度读取二维阵列的ADC?,stm32,dma,adc,Stm32,Dma,Adc,我有一个应用程序,它必须控制阵列32x32元素的ADC读数。 对于每个元素,我必须选择点读取ADC-关闭ADC。目前我使用的是像LED扫描这样的扫描方法。每次扫描我读到1分。然后将值存储在数组中并进行传输 然而,我发现这是非常缓慢的。我想用DMA来自动读取,然后我需要做的就是把它传下去。 有办法吗?我不太明白你的问题 假设您希望从ADC MCU输入引脚上的外部信号读取数据 首先,我向您推荐两种ADC读取该数据的解决方案: 在连续模式下配置ADC 在单一模式下配置ADC,并配置另一个外设(如定时器

我有一个应用程序,它必须控制阵列32x32元素的ADC读数。 对于每个元素,我必须选择点读取ADC-关闭ADC。目前我使用的是像LED扫描这样的扫描方法。每次扫描我读到1分。然后将值存储在数组中并进行传输

然而,我发现这是非常缓慢的。我想用DMA来自动读取,然后我需要做的就是把它传下去。
有办法吗?

我不太明白你的问题

假设您希望从ADC MCU输入引脚上的外部信号读取数据

首先,我向您推荐两种ADC读取该数据的解决方案:

  • 在连续模式下配置ADC
  • 在单一模式下配置ADC,并配置另一个外设(如定时器),该外设将触发ADC在每次事件时启动转换
  • 其次,有两种不同的方法来管理转换后的数据:

  • 在ADC的每个转换中断结束后,您可以手动存储数据并执行操作

    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef AdcHandle) { /获取常规通道的转换值*/ uhADCxConvertedValue=HAL\u ADC\u GetValue(AdcHandle); }

  • 配置一个DMA处理程序,该处理程序将处理ADC转换的数据,并将其自动存储在RAM中,而无需CPU干预。 #定义ADC_转换的_数据_缓冲区_大小((uint32_t)32)/*数组aADCxConvertedData[]的大小*/

  • 静态uint16_t aADCxConvertedData[ADC_转换数据_缓冲区大小]

    HAL_ADC_Start_DMA(&AdcHandle,uint32_t*)aADCxConvertedData,ADC_转换的_数据_缓冲区_大小


    您将在参考手册中找到许多详细信息。

    使用DMA,您可以自动将转换值从ADC传输到内存,而无需其他操作。我不明白你的申请。每次ADC转换前是否必须设置一些GPIO?如果每个模拟值都有一个ADC通道,则可以使用DMA数据传输创建自动ADC通道扫描。目前,对于每个ADC读取,我必须使用GPIO触发多路复用器并在解复用器上读取信号。用这种方法CPU必须工作很多。你是在用中断来表示ADC转换的结束吗?您对一个完整测量周期的期望时间是多少?目前需要多长时间?我需要传输9Kb/s。我现在不使用中断,也不使用DMA。我看到了DMA在同时读取多个通道方面的应用。我以正常的方式阅读。选择列-选择行-读取-存储到缓冲区-当数组被读取时,它将被传输。所以我问了一个问题:如何更快地读写传递数组。我的速度达到了我预期的一半我认为DMA在这种情况下帮不了你。尝试使用中断来结束ADC转换。这可以缩短测量之间的时间。您可以更进一步,在“EOSMP”ISR处触发IO开关。DMA在这里没有用,因为他想决定是否读取每个单元的电压