1樓:
我是用的原子的暫存器版的,
串列埠部分初始化部分加入這個
usart1->cr3=1<<7; //使能串列埠1的dma傳送
這是初始化
>dr,(u32)tdata,32);//dma1通道4,外設為串列埠1,儲存器為sendbuff,長度32.
下面是dma.c檔案裡的配置
u16 dma1_mem_len;//儲存dma每次資料傳送的長度
//dma1的各通道配置
//這裡的傳輸形式是固定的,這點要根據不同的情況來修改
//從儲存器->外設模式/8位資料寬度/儲存器增量模式
//dma_chx:dma通道chx
//cpar:外設地址
//cmar:儲存器地址
//***tr:資料傳輸量
void mydma_config(dma_channel_typedef*dma_chx,u32 cpar,u32 cmar,u16 ***tr)
//開啟一次dma傳輸
void mydma_enable(dma_channel_typedef*dma_chx)
void dmachannel4_irqhandler(void)
}然後每次使用呼叫一次這個
mydma_enable(dma1_channel4);//開始一次dma傳輸
就可以了
2樓:匿名使用者
自己配置?那就是有地方配置錯了
stm32 dma應用在什麼地方
3樓:正
形象地說,dma是mcu內的搬運工,通過dma把資料從外設和記憶體之間的自動搬遷專,節省軟體的開銷。屬
stm32 的dma有三種模式:記憶體-外設,外設-記憶體,記憶體-記憶體。
我舉幾個例子:
usart串列埠傳送:沒dma的情況,要傳送大量資料,需要每一個位元組傳送後產生完成中斷或輪詢旗標,然後軟體介入把下一個資料放入tdr暫存器,這樣會有大量中斷或等待消耗程式的資源,如果採用dma的話,至需要預先在dma通道設定要傳送的資料的第一位元組的記憶體地址(例如: &buf[0]), 和設定需要傳送多少位元組,開始傳送後,dma就會像z指標一樣完成一節,指標自動遞增或減自動移動資料到傳送暫存器,直至傳送完成會有一次中斷通知。
中間過程軟體完全可以不介入。
adc採集:多次取樣或迴圈取樣,同樣地沒dma的話,取樣完畢中斷,搬移adc的取樣值,出現大量中斷,如果是高速取樣情況更甚。可以通過dma取樣完成後自動寫入你指定的陣列地址,一個迴圈後dma一個完成中斷通知你做後續的事情,例如平均演算法之類的。
dac波形輸出:把波形的樣本建立一個陣列,使用dma迴圈傳送。
stm32微控制器spi問題,STM32微控制器SPI問題
才慕悅臧優 基本的底層驅動都是有的,如果使用到某個感測器,而網上一時還沒有對應的驅動庫,可以自己根據感測器的手冊編寫對應的驅動 和spi口的cs sck sdi sdo是怎麼對應的 這是你從裝置上的標識吧。一般接線為 左邊主裝置,右邊從裝置 spix nss cs spix sck sck spix...
stm32f767採用什麼核心,stm32f767可以達到多快的速度?
雌高中生酶 我也沒學過核心,一樣能控制stm32。但是,沒有這些知識,你只會執行主管的要求,卻很難做到設計。想進一步提高,必須要學習這些基礎知識。這些我遲早也要花時間去了解下的。stm32f767可以達到多快的速度? 核心可以達到216mhz 長瀨綿秋 32的用原子的可以,隨便選擇一款,微控制器用吳...
stm32f103系列效能如何,STM32F103字尾名不同,其功效有什麼區別?
西西哩的小馬甲 優點如下 1 stm32屬於arm核心的一個版本,比傳統的51微控制器高階多了,有很多資源是51不具備的,如usb控制器。而且已經廢除了機器週期什麼的,速度不是51能比的。2 stm32微控制器程式都是模組化的,介面相對簡單些,因為它自身帶好多功能,工作速度也快。而51的自身功能少,...