STM32的usart的DMA方式傳送數,程式怎麼寫

時間 2021-09-10 12:00:49

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的自身功能少,...