直接存儲(chǔ)器訪問(wèn)(Direct Memory Access),簡(jiǎn)稱(chēng)DMA。DMA是CPU一個(gè)用于數(shù)據(jù)從一個(gè)地址空間到另一地址空間“搬運(yùn)”(拷貝)的組件,數(shù)據(jù)拷貝過(guò)程不需CPU干預(yù),數(shù)據(jù)拷貝結(jié)束則通知CPU處理。因此,大量數(shù)據(jù)拷貝時(shí),使用DMA可以釋放CPU資源,相關(guān)文章推薦:詳解STM32中的DMA原理。
在STM32控制器中,芯片采用Cortex-M3架構(gòu),總線結(jié)構(gòu)有了很大的優(yōu)化,DMA占用另外的總線,并不會(huì)與CPU的系統(tǒng)總線發(fā)生沖突。也就是說(shuō),DMA的使用不會(huì)影響CPU的運(yùn)行速度。
DMA數(shù)據(jù)拷貝過(guò)程,典型的有:
內(nèi)存—>內(nèi)存,內(nèi)存間拷貝
外設(shè)—>內(nèi)存,如uart、spi、i2c等總線接收數(shù)據(jù)過(guò)程
內(nèi)存—>外設(shè),如uart、spi、i2c等總線發(fā)送數(shù)據(jù)過(guò)程
串口有必要使用DMA嗎
串口(UART)是一種低速的串行異步通信,適用于低速通信場(chǎng)景,通常使用的波特率小于或等于115200bps。PC與STM32單片機(jī)通信實(shí)例推薦:按下按鍵,通過(guò)串口發(fā)送數(shù)據(jù)實(shí)例。
對(duì)于小于或者等于115200bps波特率的,而且數(shù)據(jù)量不大的通信場(chǎng)景,一般沒(méi)必要使用DMA,或者說(shuō)使用DMA并未能充分發(fā)揮出DMA的作用。
對(duì)于數(shù)量大,或者波特率提高時(shí),必須使用DMA以釋放CPU資源,因?yàn)楦卟ㄌ芈士赡軒?lái)CPU資源過(guò)度浪費(fèi)的問(wèn)題。
舉個(gè)例子
對(duì)于發(fā)送,使用循環(huán)發(fā)送,可能阻塞線程,需要消耗大量CPU資源“搬運(yùn)”數(shù)據(jù),浪費(fèi)CPU。對(duì)于發(fā)送,使用中斷發(fā)送,不會(huì)阻塞線程,但需浪費(fèi)大量中斷資源,CPU頻繁響應(yīng)中斷。以115200bps波特率,1s大約傳輸11520字節(jié),大約69us需響應(yīng)一次中斷,如波特率再提高,將消耗更多CPU資源。
對(duì)于接收,如仍采用傳統(tǒng)的中斷模式接收,同樣會(huì)因?yàn)轭l繁中斷導(dǎo)致消耗大量CPU資源。
因此,在高波特率傳輸場(chǎng)景下,串口非常有必要使用DMA。
原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?
文章出處:【微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
462文章
53193瀏覽量
453976 -
控制器
+關(guān)注
關(guān)注
114文章
17503瀏覽量
188584 -
STM32
+關(guān)注
關(guān)注
2301文章
11075瀏覽量
369497
原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
GD32的串口DMA收發(fā)數(shù)據(jù)失敗怎么解決?
關(guān)于stm32f4zgt6和mspm0g3507串口通信問(wèn)題
STM32串口發(fā)送數(shù)據(jù),USART_FLAG_TC無(wú)法置位怎么解決?
stm32f105串口數(shù)據(jù)丟失的原因?
STM32串口通信,上電和斷電串口助手會(huì)返回?cái)?shù)是怎么回事?
使用Labview做一個(gè)485串口電子秤程序
用Labview寫(xiě)一個(gè)電子稱(chēng)的485串口程序

評(píng)論