具有 DMA 的 STM32F302 Adc 适用于不同的尺寸和通道

STM32F302 Adc with DMA for different size and channel

我正在使用 STM32F302 QFN32,不幸的是,它只有一个 ADC 模块。一个通道必须在一个周期内获得大约 500 个样本并且它必须与 PWM 同步(考虑使用定时器并且这个 i/o 将在回调中切换,因为在读取它的 ADC 通道时,我必须知道 i/o 是高是低,所以根据这个值,会决定值)。此外,还有 4 个通道必须读取。(更多样本不需要像以前那样,8 个或 16 个样本就足够了。)但是,它只有一个 ADC 模块。因此,我可以这样做吗?如果是,如何?谢谢。

ST ADC有两种转换模式。常规和注入。

常规模式就像所有 ADC 一样。您可以通过软件或触发器 (timer/gpio) 启动它,它会执行一次或一系列转换。结果被写入一个公共寄存器,由 DMA 负责。
注入模式是一种高优先级的抢占转换。一旦您通过软件或触发器启动注入的转换序列。 ADC 在常规转换之间注入转换。作为一个更高优先级的。结果存储在中断的注入结果通道之一中。
只有常规模式支持 DMA。有关详细信息,请参阅 AN4195

我建议您使用计时器为快速通道触发常规序列,并使用循环 DMA 设置来移动数据。并使用另一个定时器来触发注入序列。最多可注入 4 个通道,您走运了!

显然,你可以反过来做。有快速注射和缓慢定期。但是您需要另一个与注入的启动触发器同步的计时器,以使 DMA 移动数据。
也就是说,如果您的采样率不允许立即处理。否则你可以只使用 ISR。