STM32 以固定頻率進行DMA連續轉化

2021-10-07 08:12:51 字數 894 閱讀 9900

1,選擇adc 和 通道

2,配置adc 引數

關閉連續轉換,開啟掃瞄,開啟非連續轉換,使能dma連續轉換,以乙個組為單位進行轉換。

設定轉換的通道數,設定觸發源,設定觸發邊沿,設定每個通道的引數。

3,配置dma

選擇dma的模式為迴圈模式

4,配置timer

使能自動過載,選擇觸發事件為更新事件。拿timer的主頻除以自動過載值就是我們adc的轉化速率。需要注意的是這個速率不能超過你當前配置的adc最大轉化速率。每個通道的轉化時間為:對應通道的轉化需要的cycle+12.5cycle.

例如:我配置的adc時鐘為20m,使能了兩個通道,每個通道的轉化時間是2.5cycle,那麼我的adc最大轉化速度就為20m/(2.5+12.5 + 2.5+12.5)= 20m/30=0.667m.

此外還需注意你使用的timer的位數,如果是16位的timer,你的自動過載值不能超過65535。如果需要的頻率不高,在自動過載值不夠用的情況下,可以使用預分頻。拿timer的主頻除以(預分頻數+1)就是timer實際的執行頻率。

STM32外設DMA使用總結

stm32外設dma使用總結 1 根據需要選擇dam模式 1 迴圈模式 dma mode dma mode circular 2 正常模式 dma mode dma mode normal 2 對於dma1的chanel3,對應外設為usart3的rx 試想 如果串列埠接收中斷和dam中斷同時開啟,...

STM32使用DMA方式Printf

使用庫函式除錯printf時需要占用系統資源所以採用dma方式來printf資料 兩種實現方式 pre 已經有dma傳送管理函式 include stdio.h include stdarg.h brief modbus傳送管理 void startmodbustranst uart handlet...

stm32檢視當前時鐘頻率

最近畢業設計需要做了乙個stm32最小系統板,上電後發現延時函式不對勁,1s的led延時大概等了10s左右,初步判斷晶振電路出了問題。獲取當前時鐘頻率方法 庫函式 定義乙個全域性變數 rcc clockstypedef get rcc clock 獲取系統時鐘狀態 rcc clockstypedef...