www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 玩轉(zhuǎn)嵌入式
[導讀]來源: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_20553613

1 前言

前面講解過什么是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)方式

4 STM32串口使用DMA

關于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ù)通路
關閉