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

RS232串口連接方式及注意事項
快速實現(xiàn)C2000串口程序升級

評論