繁体   English   中英

STM32 ADC DMA。 当 MCU 被告知 ADC 结束时?

[英]STM32 ADC DMA. When MCU is informed about end of ADC?

我将 ADC 与 DMA(STM32F4,ide STM32CubeIDE)一起使用,我认为我了解它是如何工作的,但仍然有一个难题。 根据我的理解 MCU 只在 DMA 传输完成时调用,基本上 MCU 在 DMA ADC 完成时进入这个函数

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

那正确吗?

所以如果这是真的,我有下一个困境:例如 adc_clock 是 10MHz,采样时间是 480 adc_cycles,12 位 adc 分辨率。 adc_sample_period = 1/10Mhz * (480 + 12 + 3) = 49.5uS。 这意味着 MCU 将每 49.5uS 进入 HAL_ADC_ConvCpltCallback() ??? 在我看来,这是很难密集的,尤其是在更大的项目中。 有没有人知道如何解决这个“问题”? 我想例如每 1mS 读取一次 ADC 结果,但也想将 DMA 实现到 ADC 中。 欢迎任何想法

阅读 uC 文档 - 不要从“魔法”HAL 函数开始。

ADC 转换之间的 1ms 周期绝对算不上什么。 我有许多项目使用双重或三重 ADC 模式,结果采样率为 18MSPS。

一般来说,如果你想要糟糕、缓慢、低效和“偶然”工作的代码 - 使用 HAL。 否则,请学习您的硬件并改用寄存器。

我是这样解决这个问题的:我改变了 DMA 配置。 DMA 被配置为工作在循环模式,这意味着当 ADC 完成一次转换时,DMA 存储数据并通过以下方式通知 MCU

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

基本上每 49.5uS 通知 MCU 并且我的目的太密集(我每 1mS 需要一次 ADC 结果)。 我创建了一个计时器,用于在需要开始采样时指示 ADC,并且在正常模式下使用 DMA(ADC 将只进行 1 次测量)来解决我的问题。 每 1mS 从 ADC 得到结果。 所以技巧是在 DMA 模式(循环/正常模式)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM