直接存儲器訪問(Direct Memory Access),簡稱DMA。DMA是CPU一個(gè)用于數(shù)據(jù)從一個(gè)地址空間到另一地址空間“搬運(yùn)”(拷貝)的組件,數(shù)據(jù)拷貝過程不需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占用另外的總線,并不會與CPU的系統(tǒng)總線發(fā)生沖突。也就是說,DMA的使用不會影響CPU的運(yùn)行速度。

DMA數(shù)據(jù)拷貝過程,典型的有:
內(nèi)存—>內(nèi)存,內(nèi)存間拷貝
外設(shè)—>內(nèi)存,如uart、spi、i2c等總線接收數(shù)據(jù)過程
內(nèi)存—>外設(shè),如uart、spi、i2c等總線發(fā)送數(shù)據(jù)過程
串口有必要使用DMA嗎
串口(UART)是一種低速的串行異步通信,適用于低速通信場景,通常使用的波特率小于或等于115200bps。PC與STM32單片機(jī)通信實(shí)例推薦:按下按鍵,通過串口發(fā)送數(shù)據(jù)實(shí)例。
對于小于或者等于115200bps波特率的,而且數(shù)據(jù)量不大的通信場景,一般沒必要使用DMA,或者說使用DMA并未能充分發(fā)揮出DMA的作用。
對于數(shù)量大,或者波特率提高時(shí),必須使用DMA以釋放CPU資源,因?yàn)楦卟ㄌ芈士赡軒鞢PU資源過度浪費(fèi)的問題。
舉個(gè)例子
對于發(fā)送,使用循環(huán)發(fā)送,可能阻塞線程,需要消耗大量CPU資源“搬運(yùn)”數(shù)據(jù),浪費(fèi)CPU。對于發(fā)送,使用中斷發(fā)送,不會阻塞線程,但需浪費(fèi)大量中斷資源,CPU頻繁響應(yīng)中斷。以115200bps波特率,1s大約傳輸11520字節(jié),大約69us需響應(yīng)一次中斷,如波特率再提高,將消耗更多CPU資源。
對于接收,如仍采用傳統(tǒng)的中斷模式接收,同樣會因?yàn)轭l繁中斷導(dǎo)致消耗大量CPU資源。
因此,在高波特率傳輸場景下,串口非常有必要使用DMA。
原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?
文章出處:【微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
463文章
54017瀏覽量
466324 -
控制器
+關(guān)注
關(guān)注
114文章
17795瀏覽量
193367 -
STM32
+關(guān)注
關(guān)注
2310文章
11162瀏覽量
373521
原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
串口調(diào)試步驟(適合免驅(qū)動的232串口設(shè)備)
STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA
評論