找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2702|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于原子stm32 dma詳細(xì)講解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:224778 發(fā)表于 2017-8-4 18:53 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于正點(diǎn)原子Stm32f103DMA詳細(xì)介紹
          By 小澤
(1)DMA通俗的講就是可以將一個(gè)區(qū)域的數(shù)據(jù)復(fù)制到另一個(gè)區(qū)域來(lái),可為cpu減負(fù)。
以下是STM32F103DMA的特點(diǎn):



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



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

第二步:在DMA_cmar寄存器中選擇存儲(chǔ)器基地址作為傳輸?shù)哪繕?biāo)或源頭
具體寄存器列表如下:

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

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



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

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


當(dāng)寬度一致時(shí)很好理解,當(dāng)不一致的時(shí)候需要參考該表



3.DMA_ccrx中的minc和pinc寄存器分別用來(lái)開(kāi)啟存儲(chǔ)器和地址的指針增量


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


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



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

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




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



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



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



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


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




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



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

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






注意事項(xiàng)!�。�!一定要注意!�。。�!
(1)一旦開(kāi)始存儲(chǔ)到存儲(chǔ)之間的數(shù)據(jù)傳輸,不能開(kāi)啟連續(xù)轉(zhuǎn)換模式
(2)cndtr只能在dma_ccrx的en=0時(shí)寫(xiě)入對(duì)應(yīng)的具體代碼

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




                                                                       2017 .8.3
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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