[導讀]來源:https://blog.csdn.net/qq_205536131前言前面講解過什么是DMA?STM32如何配置DMA?,今天和大家分享DMA實現(xiàn)串口數(shù)據(jù)的收發(fā)。直接存儲器訪問(DirectMemoryAccess),簡稱DMA。DMA是CPU一個用于數(shù)據(jù)從一個地址空間到...
來源:https://blog.csdn.net/qq_205536131 前言
前面講解過什么是DMA? STM32如何配置DMA?,今天和大家分享DMA實現(xiàn)串口數(shù)據(jù)的收發(fā)。直接存儲器訪問(Direct Memory Access),簡稱DMA。DMA是CPU一個用于數(shù)據(jù)從一個地址空間到另一地址空間“搬運”(拷貝)的組件,數(shù)據(jù)拷貝過程不需CPU干預,數(shù)據(jù)拷貝結(jié)束則通知CPU處理。因此,大量數(shù)據(jù)拷貝時,使用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ù)過程
2 串口有必要使用DMA嗎
串口(uart)是一種低速的串行異步通信,適用于低速通信場景,通常使用的波特率小于或等于115200bps。對于小于或者等于115200bps波特率的,而且數(shù)據(jù)量不大的通信場景,一般沒必要使用DMA,或者說使用DMA并未能充分發(fā)揮出DMA的作用。對于數(shù)量大,或者波特率提高時,必須使用DMA以釋放CPU資源,因為高波特率可能帶來這樣的問題:- 對于發(fā)送,使用循環(huán)發(fā)送,可能阻塞線程,需要消耗大量CPU資源“搬運”數(shù)據(jù),浪費CPU
- 對于發(fā)送,使用中斷發(fā)送,不會阻塞線程,但需浪費大量中斷資源,CPU頻繁響應中斷;以115200bps波特率,1s傳輸11520字節(jié),大約69us需響應一次中斷,如波特率再提高,將消耗更多CPU資源
- 對于接收,如仍采用傳統(tǒng)的中斷模式接收,同樣會因為頻繁中斷導致消耗大量CPU資源
因此,高波特率場景下,串口非常有必要使用DMA。3 實現(xiàn)方式
關于STM32串口使用DMA,不乏一些開發(fā)板例程及網(wǎng)絡上一些博主的使用教程。使用步驟、流程、配置基本大同小異,正確性也沒什么毛病,但都是一些基本的Demo例子,作為學習過程沒問題;實際項目使用缺乏嚴謹性,數(shù)據(jù)量大時可能導致數(shù)據(jù)異常。測試平臺:- STM32F030C8T6
- UART1/UART2
- DMA1 Channel2—Channel5
- ST標準庫
- 主頻48MHz(外部12MHz晶振)
5 串口DMA接收
5.1 基本流程
5.2 相關配置
關鍵步驟【1】初始化串口【2】使能串口DMA接收模式,使能串口空閑中斷【3】配置DMA參數(shù),使能DMA通道buf半滿(傳輸一半數(shù)據(jù))中斷、buf溢滿(傳輸數(shù)據(jù)完成)中斷為什么需要使用DMA 通道buf半滿中斷?很多串口DMA模式接收的教程、例子,基本是使用了“空間中斷” “DMA傳輸完成中斷”來接收數(shù)據(jù)。實質(zhì)上這是存在風險的,當DMA傳輸數(shù)據(jù)完成,CPU介入開始拷貝DMA通道buf數(shù)據(jù),如果此時串口繼續(xù)有數(shù)據(jù)進來,DMA繼續(xù)搬運數(shù)據(jù)到buf,就有可能將數(shù)據(jù)覆蓋,因為DMA數(shù)據(jù)搬運是不受CPU控制的,即使你關閉了CPU中斷。嚴謹?shù)淖龇ㄐ枰鲭pbuf,CPU和DMA各自一塊內(nèi)存交替訪問,即是"乒乓緩存” ,處理流程步驟應該是這樣:【1】第一步,DMA先將數(shù)據(jù)搬運到buf1,搬運完成通知CPU來拷貝buf1數(shù)據(jù) 【2】第二步,DMA將數(shù)據(jù)搬運到buf2,與CPU拷貝buf1數(shù)據(jù)不會沖突 【3】第三步,buf2數(shù)據(jù)搬運完成,通知CPU來拷貝buf2數(shù)據(jù) 【4】執(zhí)行完第三步,DMA返回執(zhí)行第一步,一直循環(huán)STM32F0系列DMA不支持雙緩存(以具體型號為準)機制,但提供了一個buf"半滿中斷"
,即是數(shù)據(jù)搬運到buf大小的一半時,可以產(chǎn)生一個中斷信號。基于這個機制,我們可以實現(xiàn)雙緩存功能,只需將buf空間開辟大一點即可。【1】第一步,DMA將數(shù)據(jù)搬運完成buf的前一半時,產(chǎn)生“半滿中斷”,CPU來拷貝buf前半部分數(shù)據(jù) 【2】第二步,DMA繼續(xù)將數(shù)據(jù)搬運到buf的后半部分,與CPU拷貝buf前半部數(shù)據(jù)不會沖突 【3】第三步,buf后半部分數(shù)據(jù)搬運完成,觸發(fā)“溢滿中斷”,CPU來拷貝buf后半部分數(shù)據(jù) 【4】執(zhí)行完第三步,DMA返回執(zhí)行第一步,一直循環(huán)UART2 DMA模式接收配置代碼如下,與其他外設使用DMA的配置基本一致,留意關鍵配置:- 串口接收,DMA通道工作模式設為連續(xù)模式
- 使能DMA通道接收buf半滿中斷、溢滿(傳輸完成)中斷
- 啟動DMA通道前清空相關狀態(tài)標識,防止首次傳輸錯亂數(shù)據(jù)
void?bsp_uart2_dmarx_config(uint8_t?*mem_addr,?uint32_t?mem_size)
{
???DMA_InitTypeDef?DMA_InitStructure;
?
?DMA_DeInit(DMA1_Channel5);?
?DMA_Cmd(DMA1_Channel5,?DISABLE);
?DMA_InitStructure.DMA_PeripheralBaseAddr??=?(uint32_t)
本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
《帶得走的智能制造》暑期課程圓滿落幕 北京2025年7月25日 /美通社/ -- 近日,由國際獨立第三方檢測、檢驗和認證機構(gòu)德國萊茵TÜV大中華區(qū)(以下簡稱"TÜV萊茵")與北京...
關鍵字:
智能制造
BSP
DMA
信息安全
在實時控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對時間敏感的應用場景中,中斷響應延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...
關鍵字:
STM32
DMA
在嵌入式系統(tǒng)、網(wǎng)絡通信等對數(shù)據(jù)傳輸效率要求極高的場景中,零拷貝技術能夠顯著減少數(shù)據(jù)在內(nèi)存中的拷貝次數(shù),降低CPU負載,提高系統(tǒng)性能。DMA(直接內(nèi)存訪問)環(huán)形緩沖區(qū)與內(nèi)存池相結(jié)合的雙重優(yōu)化策略,為實現(xiàn)高效的零拷貝數(shù)據(jù)傳輸...
關鍵字:
零拷貝
DMA
嵌入式系統(tǒng)
STM32單片機憑借其高性能、低功耗、豐富的外設資源等優(yōu)勢,在工業(yè)控制、消費電子、汽車電子等領域得到了廣泛應用。在嵌入式系統(tǒng)開發(fā)中,高效的數(shù)據(jù)處理和傳輸至關重要。中斷技術和DMA技術作為STM32單片機中重要的數(shù)據(jù)處理和...
關鍵字:
STM32
DMA
在嵌入式系統(tǒng)中,隨著數(shù)據(jù)量的不斷增加和實時性要求的提高,傳統(tǒng)的CPU直接控制數(shù)據(jù)傳輸?shù)姆绞街饾u暴露出效率低下的問題。為了應對這一挑戰(zhàn),直接內(nèi)存訪問(Direct Memory Access,DMA)技術應運而生,成為實現(xiàn)...
關鍵字:
DMA
嵌入式系統(tǒng)
高速數(shù)據(jù)傳輸
廣州2025年1月21日 /美通社/ -- 在數(shù)字營銷領域快速發(fā)展的今天,每一場行業(yè)盛會都預示著新的轉(zhuǎn)折與機遇。2025年1月10日,由DMAA數(shù)字營銷獎主辦,廣州4A聯(lián)合主辦,廣州市廣告行業(yè)協(xié)會指導的第八屆DMAA國際...
關鍵字:
DMA
AI
AI技術
創(chuàng)始人
在現(xiàn)代計算機系統(tǒng)中,直接內(nèi)存訪問(DMA)技術被廣泛應用于高速數(shù)據(jù)傳輸,其核心理念在于讓數(shù)據(jù)傳輸不再依賴CPU的參與,從而釋放CPU資源以處理其他任務。然而,在DMA操作完成后,系統(tǒng)需要一種機制來檢測DMA傳輸是否已完成...
關鍵字:
DMA
CPU
輪詢檢測
之前有個同事因為用串口查詢方式發(fā)送數(shù)據(jù),被我說了一頓,明明有DMA資源,竟然放著不用,對于魚鷹這種性能強迫癥來說,肯定無法忍受,所以當時就和他說,有時間你把它改一下。誰知道過了好幾個月他才有時間弄這個,然后還是出了問題,...
關鍵字:
DMA
串口
UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)是一種常用的串行通信協(xié)議,廣泛應用于單片機或各種嵌入式設備之間的通信。
關鍵字:
UART
DMA
轉(zhuǎn)移數(shù)據(jù)(尤其是轉(zhuǎn)移大量數(shù)據(jù))是可以不需要CPU參與。比如希望外設A的數(shù)據(jù)拷貝到外設B,
關鍵字:
CPU
DMA
數(shù)據(jù)通路
北京2023年8月31日 /美通社/ -- 8月30日,由中共河曲縣委、河曲縣人民政府主辦,中共河曲縣委宣傳部、河曲縣文化和旅游局、保利樂享文娛科技(北京)有限公司承辦的"河清盛世,曲著華章"2023...
關鍵字:
3D建模
BSP
DMA
MAPPING
北京2023年8月9日 /美通社/ -- 浪潮云海經(jīng)過13年的發(fā)展,到今天形成了以服務器虛擬化、超融合、InCloudOS 為代表的云海產(chǎn)品家族,憑借領先的產(chǎn)品技術能力和豐富的行業(yè)實踐,滿足不同行業(yè)、場景下客戶的上云需求...
關鍵字:
DMA
虛擬化
軟硬件
CPU
北京2023年2月20日 /美通社/ -- 在經(jīng)濟領域有著重要影響力的CFS財經(jīng)峰會2023第十二屆活動定于今年7月舉行,活動主題為"激活高質(zhì)量發(fā)展澎湃活力"。 今年的財經(jīng)峰會將以線下為主,線上結(jié)合...
關鍵字:
數(shù)字化
智能制造
數(shù)字經(jīng)濟
DMA
Mixpanel現(xiàn)已在GoogleCloudMarketplace上提供。Mixpanel功能強大、易于使用的產(chǎn)品分析解決方案可向產(chǎn)品團隊展示對于其產(chǎn)品有效和無效的舉措,讓團隊更便捷地訪問數(shù)據(jù),并幫助他們優(yōu)先考慮其路線圖...
關鍵字:
PANEL
MIX
GOOGLE
DMA
高盛集團(Goldman Sachs Group)周二證實了一項全面重組計劃,這是該公司歷史上最大的改革舉措之一。高盛將把其交易和投行業(yè)務合并為一個部門,使該行從四個部門縮減至三個部門,縮減進軍零售銀行業(yè)務的努力,專注于...
關鍵字:
DMA
GROUP
GO
AN
SWM32S單片機有1個SDIO接口,支持多媒體卡(MMC)、SD 存儲卡、SDIO 卡等設備,可以使用軟件方法或者 DMA 方法(SDIO 模塊內(nèi)部 DMA,與芯片 DMA 模塊無關)進行數(shù)據(jù)傳輸。
關鍵字:
SWM32S單片機
SDIO
DMA
標普500指數(shù)今年迄今為止下跌22.7%,但高盛(Goldman Sachs)策略師認為估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management稱,面對高通脹環(huán)境下的利率大幅上升,股...
關鍵字:
DMA
MANAGEMENT
ST
高盛集團(Goldman Sachs Group)計劃將其最大的業(yè)務合并為三個部門,進行該華爾街公司歷史上最大的一次業(yè)務重組。高盛將把其旗艦投行業(yè)務和交易業(yè)務合并為一個部門,同時將資產(chǎn)管理和財富管理業(yè)務合并為另一個部門。...
關鍵字:
APPLE
DMA
GENERAL
GREEN
北京2022年8月8日 /美通社/ -- 8月8日,由百事公司大中華區(qū)(簡稱"百事公司") 聯(lián)合物美集團、多點Dmall以及中國鄉(xiāng)村發(fā)展基金會共同發(fā)起的"物美興農(nóng)·多點樂事&q...
關鍵字:
MIDDOT
數(shù)字化
COO
DMA
武漢2022年7月27日 /美通社/ -- 7月25日,日立電梯聯(lián)合越秀商投,在武漢越秀財富中心開展 "Landmark云端智同行"活動?;顒由希樟㈦娞莨こ處煘橛脩衄F(xiàn)場講解電梯原理,并在寫字樓內(nèi)布置...
關鍵字:
DMA
LAN
MARK
日立