stm32的DMA傳輸一半中斷

2022-03-01 06:04:37 字數 759 閱讀 8757

這裡本想做乙個錄音程式

硬體很簡單:

mic(麥克風)放大濾波電路---->stm32的adc----->dma通道----->乙個陣列快取------->通過fatfs的  f_write() 存入到tf卡

之後就是程式思路:

adc採集的電壓資料,,

dma設定成迴圈採集模式,,這樣實時的採集電壓了漏不掉聲音資料,,(如果設定為一次傳輸,那麼在再次開啟前,採集的資料會漏掉的)

dma設定成傳輸到一半有個中斷,,,這樣快取陣列如果設成100,那麼存滿50個就會有個中斷

這樣的好處就是,相當於有兩個籮筐,乙個用來接收採集的蘿蔔,,另乙個倒蘿蔔(倒蘿蔔的人叫dma,蘿蔔匯入了tf卡),,,兩個籮筐輪流使用

但是這樣有個問題,就是兩個籮筐要配合,,,倒蘿蔔的速度要跟得上採蘿蔔的速度,,,,也就是說,到蘿蔔的速度要》=採蘿蔔的速度

那麼聲音的取樣率是由寫tf卡的速度決定的,,,如果寫tf卡的速度慢,,,那麼取樣率只能設定慢一點,,,否則蘿蔔沒有地方放

所以來研究一下如何dma傳輸到一半的時候產生中斷

下面摘自:

三 stm32之串列埠通訊DMA傳輸完成中斷

一 dma功能簡介 首先嘮叨一下dma的基本概念,dma的出現大大減輕了cpu的工作量。在硬體系統中,主要由cpu 核心 外設 記憶體 sram 匯流排等結構組成,資料經常要在記憶體和外設之間,外設和外設之間轉移。例如 cpu需要處理從外設採集回來的資料,cpu需要先將資料從adc外設的暫存器讀取到...

STM32硬體IIC之DMA傳輸資料

這裡給出乙個實現用dma傳輸iic資料的實現過程這裡咱們說3個點 1.檢查iic匯流排上是否有指定位址的器件 2.iic讀取資料 3.iic寫資料 下面來乙個乙個詳細說明 1.檢查iic匯流排上是否有指定位址的器件 1.判斷是否匯流排忙,如果忙則等待 2.產生起始位 3.等待起始位產生完成 4.傳送...

stm32 利用DMA 串列埠空閒中斷接受任意長資料

二 串列埠空閒中斷 三 糾正 在進行stm32開發時,有時會遇到這種情況 需要在裝置間進行資料傳輸,由於stm32串列埠rdr和tdr暫存器都是8位有效的,我們往往需要定義傳輸協議 如一幀資料中,包含包含幀頭 幀id 資料幀 校驗幀等若干8位資料 我們希望可以一次收到一幀資料,並進行解碼操作。利dm...