我可以多快读取二维数组的 ADC?

问题描述

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

但是,我发现这很慢。我想用 DMA 来自动化这个读取,然后我需要做的就是传递它。 有没有办法做到这一点?

解决方法

我不太明白你的问题。

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

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

  1. 在连续模式下配置您的 ADC。
  2. 在单模式下配置您的 ADC,并配置另一个外设(如定时器),该外设将触发 ADC 在每个事件中启动转换。

其次,有两种不同的方式来管理转换后的数据:

  1. 在 ADC 的每次转换结束中断后,您可以手动存储数据并完成您的工作。

    void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef AdcHandle) { / 获取常规通道的转换值 */ uhADCxConvertedValue = HAL_ADC_GetValue(AdcHandle); }

  2. 配置一个 DMA 处理程序,它将处理 ADC 转换的数据并将其自动存储在 RAM 中,无需 CPU 干预。 #define ADC_CONVERTED_DATA_BUFFER_SIZE ((uint32_t) 32) /* 数组大小 aADCxConvertedData[] */

静态 uint16_t aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];

HAL_ADC_Start_DMA(&AdcHandle,uint32_t *)aADCxConvertedData,ADC_CONVERTED_DATA_BUFFER_SIZE

您会在参考手册中找到很多详细信息。