找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2744|回復(fù): 0
收起左側(cè)

基于原子stm32 dma詳細講解

[復(fù)制鏈接]
ID:224778 發(fā)表于 2017-8-4 18:53 | 顯示全部樓層 |閱讀模式
基于正點原子Stm32f103DMA詳細介紹
          By 小澤
(1)DMA通俗的講就是可以將一個區(qū)域的數(shù)據(jù)復(fù)制到另一個區(qū)域來,可為cpu減負。
以下是STM32F103DMA的特點:



(2)stm32f103大容量芯片中具有兩個DMA,DMA1具有7個不同的通道DAM2有5個通道,當選擇好固定的通道時,所選擇的外設(shè)也就固定了。
以下是通道對應(yīng)的具體外設(shè):



(3)DMA的操作大致分為3步,涉及4個重要的寄存器
第一步:在DMA_cpar寄存器中選擇外設(shè)基地址作為傳輸?shù)脑搭^或目標
具體寄存器列表如下:

第二步:在DMA_cmar寄存器中選擇存儲器基地址作為傳輸?shù)哪繕嘶蛟搭^
具體寄存器列表如下:

第三步:在通道配置寄存器(dma_ccrx)中的DIR寄存器中設(shè)置傳輸方向
當其設(shè)置為0時將外設(shè)設(shè)為目標源,當其設(shè)置為1時將存儲器設(shè)為目標源
具體寄存器操作如下:

PS:每傳送一次數(shù)據(jù)執(zhí)行一次DAM_cndtr(數(shù)據(jù)傳輸量)寄存器遞減操作,所以該寄存器包含尚未完成的操作項目(cndtr只能在dma_ccrx的en=0時寫入)。



(4)其他的一些重要寄存器:
1.DMA_ccrx中的pl寄存器,該寄存器充當仲裁器可為每個通道配置優(yōu)先等級

2.DMA_ccrx中有msize和psize寄存器分別設(shè)置存儲器和外設(shè)的數(shù)據(jù)寬度


當寬度一致時很好理解,當不一致的時候需要參考該表



3.DMA_ccrx中的minc和pinc寄存器分別用來開啟存儲器和地址的指針增量


4.DMA_ccrx寄存器中的circ寄存器用于設(shè)置循環(huán)模式,當一次數(shù)據(jù)傳輸完成
后,還可以無限多次的傳輸數(shù)據(jù)。


5.DMA_ccrx中有MEM2MEM寄存器用來開啟存儲器到存儲器的數(shù)據(jù)傳輸,一
旦開啟這個模式,將不能再使用循環(huán)模式



(4)中斷:半傳輸標志位(HTIF),傳輸完成標志位(TCIF),傳輸錯誤標志(TEIF)

(5)關(guān)于DMA配置問題怎么快速找到外設(shè)使能函數(shù):
在FWLIB下找到相應(yīng)的“xx.c”文件 在里面直接搜索DMA即可




其實外設(shè)地址也可以設(shè)置為你定義的內(nèi)存基地址



Dst就是將所謂的外設(shè)基地址設(shè)置為目標
Src就是將所謂的外設(shè)基地址設(shè)置為源頭



設(shè)置cndtr寄存器,可查看剩余的數(shù)據(jù)



可以設(shè)置外設(shè)或寄存器地址自增與否


是否開啟循環(huán)模式




(7)一定要開啟相應(yīng)外設(shè)的時鐘



由這段代碼可以清晰看到是要發(fā)送的字節(jié)長度,是要發(fā)送的數(shù)據(jù)量,所以要發(fā)送的數(shù)據(jù)量為(8200*8bit
)這兩者是有區(qū)別的為了進一步佐證我的想法我查看的buffsize的具體數(shù)值

0x10000轉(zhuǎn)化為10進制為65536 說明我的想法是正確的。






注意事項�。。。∫欢ㄒ⒁猓。。。�!
(1)一旦開始存儲到存儲之間的數(shù)據(jù)傳輸,不能開啟連續(xù)轉(zhuǎn)換模式
(2)cndtr只能在dma_ccrx的en=0時寫入對應(yīng)的具體代碼

(3)一定要開啟相應(yīng)外設(shè)的時鐘
(4)就是我在上面說過的關(guān)于buffsize的問題 ,一定要區(qū)分好字節(jié)和數(shù)據(jù)




                                                                       2017 .8.3
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表