STM32
直播中

贾小龙

7年用户 1613经验值
私信 关注
[问答]

STM32F1内部ADC的DUAL MODE的使用问题求解

我想利用STM32F1内部的ADC采集四路电压值,因为要求同时采集,所以我使用了ADC的DUAL MODE,可是由于始终未能读明白芯片手册!ADC的设置与DMA的设置基本上参考STM32F1提供的例程设置,可现在出现了如下问题(代码不在身边,只能表达大体意思)基本如下:
采集顺序为AD1,AD2             // Regular Group
                 AD1,AD3
我定义了数组TABLE[2]用来存储转换后的数据(DMA的起始地址为TABLE的地址)。
if(flag)
{
ENABLE_ADC();
while( EOC);
DISABLE_ADC();
读取DMA指定数组中的数据;
}
反正就是我不断的采集ADC的值,可问题就是我发现当采集第二次时DMA指定的数组(TABLE[])中的数据并没有发生变化,始终为第一次的采集值,这是什么原因咧,是不是由于DMA的指向还在自增,所以我无法看到后面转换值的存储位置咧,请大神指教,急!


回帖(1)

莫循虎

2024-5-9 16:24:50
首先,让我们了解一下STM32F1的ADC双模式(DUAL MODE)的基本概念。在双模式下,两个ADC(ADC1和ADC2)可以同时工作,共享一个公共的采样时钟和一个转换时钟。这样可以提高数据采集的速度,同时减少对CPU的干扰。

根据您的描述,您希望使用STM32F1的ADC双模式来采集四路电压值,并且要求同时采集。您已经设置了ADC1和ADC2的Regular Group,并且定义了一个数组TABLE[2]来存储转换后的数据。DMA的起始地址为TABLE的地址。

在这种情况下,您需要确保以下几点:

1. 正确配置ADC1和ADC2的通道:确保ADC1和ADC2的通道分别连接到您想要测量的四个模拟输入。

2. 配置ADC1和ADC2的双模式:在初始化ADC1和ADC2时,需要设置它们为双模式。这通常涉及到设置ADC的CR1寄存器中的DUALMOD位。

3. 配置DMA:确保DMA的起始地址设置为TABLE的地址,并且DMA的通道配置为与ADC1和ADC2的DMA请求相关联。

4. 配置ADC1和ADC2的Regular Group:根据您的需求,您需要设置ADC1的Regular Group为AD1和AD2,ADC2的Regular Group为AD1和AD3。这通常涉及到设置ADC的SQR1和SQR2寄存器。

5. 启动ADC1和ADC2的转换:在配置好ADC1和ADC2后,您需要启动它们的转换。这通常涉及到设置ADC的CR2寄存器中的ADON位,以及启动DMA。

6. 检查DMA传输是否完成:在DMA传输完成后,您需要检查DMA的状态,以确保数据已经传输到TABLE数组中。

7. 处理数据:在DMA传输完成后,您可以从TABLE数组中读取转换后的数据,并进行相应的处理。

如果您已经按照上述步骤进行了设置,但仍然遇到问题,建议您检查以下几点:

- 确保您的硬件连接正确,包括ADC通道和DMA的连接。
- 仔细阅读STM32F1的参考手册,确保您正确理解了双模式的工作原理和相关寄存器的配置。
- 查看STM32F1的例程,了解如何正确配置ADC双模式和DMA。
- 使用STM32CubeMX工具生成初始化代码,这可以帮助您更快地理解如何配置ADC双模式和DMA。

希望这些建议能帮助您解决问题。如果您有更具体的问题或需要进一步的帮助,请随时提问。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分