在USART文章中講解了串口的輪詢和中斷模式,本文介紹一下通過DMA模式控制串口傳輸。
直接存儲器訪問 (DMA) 用于在外設(shè)與存儲器之間以及存儲器與存儲器之間提供高速數(shù)據(jù)傳輸。可以在無需任何 CPU 操作的情況下通過 DMA 快速移動數(shù)據(jù)。這樣節(jié)省的 CPU 資源可供其它操作使用。說白了DMA就是一個(gè)搬運(yùn)工,將數(shù)據(jù)從一個(gè)地方搬到另一個(gè)地方而不需要CPU處理。作為一個(gè)搬運(yùn)工,要他正常工作必須要確定幾個(gè)重要的參數(shù):
傳輸模式:數(shù)據(jù)從哪里搬到哪里。三種可能的傳輸方向:存儲器到外設(shè)、外設(shè)到存儲器或存儲器到存儲器
通道選擇:就是數(shù)據(jù)傳輸?shù)氖亲吣菞l道路
仲裁器:多個(gè)DMA傳輸是優(yōu)先級高的優(yōu)先傳輸
數(shù)據(jù)長度:每次傳輸?shù)臄?shù)據(jù)長度,可以一個(gè)字節(jié),兩個(gè)字節(jié)(半字),四個(gè)字節(jié)(字)
指針遞增:如果使能了遞增模式,則下一次傳輸?shù)牡刂穼⑹乔耙淮蝹鬏數(shù)牡刂愤f增 1(對于字節(jié))、2(對于半字)或4(對于字)
打開STM32CubeMX重新建工程,配置和上一章配置一樣。只是這個(gè)工程中,在DMA設(shè)置欄添加UASART發(fā)送TX和接收RX的DMA。發(fā)送選擇 DMA1 Channel 4通道,方向從存儲器到外設(shè)。優(yōu)先級為低。接收選擇DMA1 Channel 5通道,方向外設(shè)到存儲器,優(yōu)先級為低。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)存儲器存儲的是要發(fā)送的數(shù)據(jù),所以地址指針要遞增才能將所以的數(shù)據(jù)發(fā)送出去。
串口數(shù)據(jù)發(fā)送寄存器只能存儲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ā)送出去。這是只測試發(fā)送,至于接收可以看USART文內(nèi)容。
編譯程序并下載到開發(fā)板。用USB線連接開發(fā)板到電腦,在電腦上打開串口調(diào)試助手。選擇對應(yīng)的串口號,設(shè)置波特率為115200,接收到如圖信息。需要注意的是,如果不開啟串口中斷,則程序只能發(fā)送一次數(shù)據(jù),程序不能判斷DMA傳輸是否完成,USART一直處于busy狀態(tài)。
-
dma
+關(guān)注
關(guān)注
3文章
560瀏覽量
100546 -
串口傳輸
+關(guān)注
關(guān)注
0文章
33瀏覽量
1796
原文標(biāo)題:STM32CubeMX-直接存儲器訪問(DMA)
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論