簡體   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