在USART文章中講解了串口的輪詢和中斷模式,本文介紹一下通過DMA模式控制串口傳輸。
直接存儲(chǔ)器訪問 (DMA) 用于在外設(shè)與存儲(chǔ)器之間以及存儲(chǔ)器與存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸??梢栽跓o需任何 CPU 操作的情況下通過 DMA 快速移動(dòng)數(shù)據(jù)。這樣節(jié)省的 CPU 資源可供其它操作使用。說白了DMA就是一個(gè)搬運(yùn)工,將數(shù)據(jù)從一個(gè)地方搬到另一個(gè)地方而不需要CPU處理。作為一個(gè)搬運(yùn)工,要他正常工作必須要確定幾個(gè)重要的參數(shù):
傳輸模式:數(shù)據(jù)從哪里搬到哪里。三種可能的傳輸方向:存儲(chǔ)器到外設(shè)、外設(shè)到存儲(chǔ)器或存儲(chǔ)器到存儲(chǔ)器
通道選擇:就是數(shù)據(jù)傳輸?shù)氖亲吣菞l道路
仲裁器:多個(gè)DMA傳輸是優(yōu)先級(jí)高的優(yōu)先傳輸
數(shù)據(jù)長度:每次傳輸?shù)臄?shù)據(jù)長度,可以一個(gè)字節(jié),兩個(gè)字節(jié)(半字),四個(gè)字節(jié)(字)
指針遞增:如果使能了遞增模式,則下一次傳輸?shù)牡刂穼⑹乔耙淮蝹鬏數(shù)牡刂愤f增 1(對(duì)于字節(jié))、2(對(duì)于半字)或4(對(duì)于字)
打開STM32CubeMX重新建工程,配置和上一章配置一樣。只是這個(gè)工程中,在DMA設(shè)置欄添加UASART發(fā)送TX和接收RX的DMA。發(fā)送選擇 DMA1 Channel 4通道,方向從存儲(chǔ)器到外設(shè)。優(yōu)先級(jí)為低。接收選擇DMA1 Channel 5通道,方向外設(shè)到存儲(chǔ)器,優(yōu)先級(jí)為低。Mode為Normal,Data Width選擇Byte。
其中mode設(shè)置可以選擇Normal表單次傳輸,傳輸一次后終止傳輸,Circular表示循環(huán)傳輸,傳輸完成后又重新開始繼續(xù)傳輸,不斷循環(huán)永不停止。此處選擇單次傳輸。
Increment Address表示地址指針遞增。串口發(fā)送數(shù)據(jù)是將數(shù)據(jù)不斷存進(jìn)串口的發(fā)送數(shù)據(jù)寄存器(USARTx_TDR)。所以外接的地址是不遞增。而內(nèi)存儲(chǔ)器存儲(chǔ)的是要發(fā)送的數(shù)據(jù),所以地址指針要遞增才能將所以的數(shù)據(jù)發(fā)送出去。
串口數(shù)據(jù)發(fā)送寄存器只能存儲(chǔ)8bit,每次發(fā)送一個(gè)字節(jié),所以數(shù)據(jù)長度選擇Byte。另外要注意的一點(diǎn),必須要開啟串口中斷。DMA1中斷已默認(rèn)開啟。生成報(bào)告以及代碼,編譯程序。在usart.c文件中,可以找到剛才的DMA設(shè)置。
在main函數(shù)前面添加發(fā)送的數(shù)據(jù)。
在main()函數(shù)的while(1)循環(huán)中添加應(yīng)用程序,通過DMA將數(shù)據(jù)發(fā)送出去。這是只測(cè)試發(fā)送,至于接收可以看USART文內(nèi)容。
編譯程序并下載到開發(fā)板。用USB線連接開發(fā)板到電腦,在電腦上打開串口調(diào)試助手。選擇對(duì)應(yīng)的串口號(hào),設(shè)置波特率為115200,接收到如圖信息。需要注意的是,如果不開啟串口中斷,則程序只能發(fā)送一次數(shù)據(jù),程序不能判斷DMA傳輸是否完成,USART一直處于busy狀態(tài)。
-
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103242 -
串口傳輸
+關(guān)注
關(guān)注
0文章
33瀏覽量
1992
原文標(biāo)題:STM32CubeMX-直接存儲(chǔ)器訪問(DMA)
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
DMA 串口傳輸原理解析

5416與主機(jī)通信設(shè)想通過DMA的PINGPONG模式,通過USB口傳回主機(jī)可行嗎?
串口傳輸文件及漢字疊加顯示的方法
如何通過串口傳輸數(shù)據(jù)
如何用串口傳輸float類型數(shù)據(jù)
串口通訊服務(wù)器的端口傳輸速率
STM32 LoRa無線數(shù)傳模塊 PC通過串口傳輸數(shù)據(jù)到單片機(jī)

串口傳輸(51單片機(jī)版)

評(píng)論