STM32系列芯片都內(nèi)置DMA外設(shè),其中很多系列的DMA配備了FIFO。這里以STM32F429芯片及開(kāi)發(fā)板為例,演示一下帶FIFO的DMA傳輸實(shí)現(xiàn)過(guò)程。
大致情況是這樣的,我用TIMER1通道1的比較事件觸發(fā)DMA,將內(nèi)存數(shù)據(jù)寫(xiě)進(jìn)UART5的數(shù)據(jù)發(fā)送寄存器DR,并將UART5的TX/RX腳物理短接,同時(shí)開(kāi)啟UART5的DMA接收模式,即DMA將UART5接收到的數(shù)據(jù)寫(xiě)到指定的接收內(nèi)存區(qū)。下面重點(diǎn)介紹UART5的DMA方式的接收過(guò)程。
首先使用STM32CubeMx完成基本配置。
下面是關(guān)于TIM1的相關(guān)配置,使用通道1的比較事件觸發(fā)DMA,將內(nèi)存數(shù)據(jù)寫(xiě)入U(xiǎn)ART的發(fā)送數(shù)據(jù)寄存器。為什么還要搞個(gè)定時(shí)器來(lái)觸發(fā),其中一個(gè)原因是為了后面好演示結(jié)果。
下面是關(guān)于UART5的基本配置,并開(kāi)啟其接收的DMA傳輸。此時(shí)配置還沒(méi)有使用FIFO.
添加用戶代碼。代碼基于STM32Cube庫(kù)而準(zhǔn)備,這里發(fā)送端發(fā)送17個(gè)字節(jié)數(shù)據(jù)出來(lái)。
我們不妨先看看基于上面不使用FIFO的配置,即使用DMA 直接傳輸時(shí)的運(yùn)行結(jié)果。
在演示基于FIFO的DMA應(yīng)用結(jié)果之前,不妨簡(jiǎn)單介紹下FIFO的結(jié)構(gòu)以及DMA傳輸過(guò)程中使用它有什么好處。
對(duì)于STM32F4來(lái)講,每個(gè)DMA stream都有4個(gè)字的FIFO可用。它用來(lái)暫存來(lái)自DMA源端的數(shù)據(jù),每當(dāng)FIFO里存放的數(shù)據(jù)達(dá)到設(shè)定的閾值后,數(shù)據(jù)就會(huì)被移走。閾值可以設(shè)置為從1個(gè)字到4個(gè)字的深度。
啟用DMA的FIFO可以最大程度地避免數(shù)據(jù)傳輸過(guò)程中的溢出問(wèn)題,可以減少DMA對(duì)內(nèi)存的訪問(wèn)次數(shù)從而減少總線訪問(wèn)競(jìng)爭(zhēng),通過(guò)BURST分組傳輸優(yōu)化傳輸帶寬以提升芯片性能。利用FIFO,通過(guò)對(duì)源端/目標(biāo)端的數(shù)據(jù)進(jìn)行打包或拆包以適應(yīng)不同數(shù)據(jù)寬度的訪問(wèn)需求.讓DMA的使用更為方便靈活.
這里以UART5的數(shù)據(jù)接收為例。當(dāng)啟用FIFO時(shí),目的端數(shù)據(jù)寬度可以從字節(jié)/半字/字格式自由設(shè)置。首先,當(dāng)UART5的DMA接收配置成下面這樣時(shí),即DMA single模式。
FIFO閾值設(shè)置為1/4滿,即1個(gè)字的深度。運(yùn)行上面代碼,我們可看到來(lái)自源端的4個(gè)Byte被封裝成1個(gè)word字。數(shù)據(jù)會(huì)按字方式逐一寫(xiě)入內(nèi)存?!緸榭葱Ч覍⒍〞r(shí)器的觸發(fā)放慢后做多次截圖】
不過(guò),按照上面方式將4個(gè)字節(jié)封裝成一個(gè)字的傳輸過(guò)程中如果發(fā)生被打斷的情況,此時(shí)就會(huì)遇到數(shù)據(jù)損壞的風(fēng)險(xiǎn)。因此就引入了DMA BURST傳輸,或稱DMA節(jié)拍傳輸。即幾個(gè)數(shù)據(jù)【4/8/16】被封裝成1組,或稱1個(gè)burst,或稱1節(jié)。在一節(jié)內(nèi)逐個(gè)進(jìn)行數(shù)據(jù)傳輸,每個(gè)數(shù)據(jù)的傳輸相當(dāng)于1拍。儼如音樂(lè)里的節(jié)拍,4拍1節(jié)、8拍1節(jié)之類的。對(duì)于每1節(jié)內(nèi)的數(shù)據(jù)傳輸,DMA對(duì)總線的占用不會(huì)被總線矩陣仲裁器解除或打斷,以保證每節(jié)數(shù)據(jù)的可靠完成。
我們還是以上面的應(yīng)用為例,調(diào)整配置并開(kāi)啟BURST模式后具體看看。
我對(duì)memory端,也就是這里的目的端啟用了BURST節(jié)拍傳輸。因?yàn)镕IFO深度為1個(gè)字,每次源端數(shù)據(jù)剛好達(dá)到FIFO閾值水平時(shí),通過(guò)1節(jié)4拍即可傳輸完畢,每拍對(duì)應(yīng)1個(gè)byte的傳輸?;贐USRT模式配置可以實(shí)現(xiàn)跟上面Single模式下同樣的效果,而且數(shù)據(jù)傳輸更有保障。通過(guò)下圖可以看出DMA按節(jié)進(jìn)行傳輸,每節(jié)傳輸4個(gè)數(shù)據(jù)。
針對(duì)上述應(yīng)用,我們還可以再次調(diào)整burst配置,比如下面的樣子:
此時(shí)FIFO閾值為2個(gè)字,源端Memory的數(shù)據(jù)訪問(wèn)寬度為半字,Burst大小為4。這樣的話,源端數(shù)據(jù)達(dá)到FIFO閾值時(shí),4個(gè)半字?jǐn)?shù)據(jù)組成1節(jié)分四拍傳輸完成,其中每拍傳輸半字?jǐn)?shù)據(jù)。我們同樣看看慢動(dòng)作后的結(jié)果。
順便提醒下,我們?cè)谧龌贔IFO的burst模式的DMA傳輸時(shí),BURST的大小乘以數(shù)據(jù)大小不得超過(guò)設(shè)置的FIFO閾值大小,否則會(huì)出錯(cuò)。比方以剛才上面的配置來(lái)看。
FIFO閾值為2個(gè)字,即8字節(jié)。數(shù)據(jù)寬度為半字,即2字節(jié),Burst大小為4。完全合規(guī)。
上一篇:STM32CUBEMX開(kāi)發(fā)GD32F303(8)----USART收發(fā)配置
下一篇:STM32WB如何一次性燒寫(xiě)FUS+STACK+APP?
推薦閱讀最新更新時(shí)間:2025-06-26 13:03




設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- DI-70 - PoE檢測(cè)和分類(0類)接口電路
- 使用 Cypress Semiconductor 的 MB3775 的參考設(shè)計(jì)
- DC1369A-E,LTC2257-14 演示板,14 位 40 Msps ADC,LVDS 輸出,5-170MHz
- 使用 Analog Devices 的 ADP1823ACPZ 的參考設(shè)計(jì)
- 使用 Analog Devices 的 LT1634CCZ-5 的參考設(shè)計(jì)
- FEBFAN25800-MPSLDO1-GEVB:500 mA 低 IQ、低噪聲、LDO 穩(wěn)壓器
- TLV431C 低壓精密可調(diào)并聯(lián)穩(wěn)壓器的典型應(yīng)用
- AM2G-2412DH30Z ±12V 2 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用,用于開(kāi)/關(guān)控制應(yīng)用
- LTC3634HFE 降壓穩(wěn)壓器的典型應(yīng)用電路,具有使用兩個(gè)輸入電源的 2 相 VTT 終端
- 使用 ROHM Semiconductor 的 BP5222A 的參考設(shè)計(jì)
- 三星晶圓代工舉行 SAFE 論壇 2025 首爾場(chǎng):聚焦挽回客戶,引入 SF2P+ 工藝
- 汽車區(qū)域控制器方案指南
- 丹佛斯DCM1000功率模塊的封裝技術(shù)演進(jìn)
- IAA MOBILITY移動(dòng)出行趨勢(shì)指數(shù)發(fā)布
- 寧德時(shí)代CTP 2.0電池包產(chǎn)線投產(chǎn),助力問(wèn)界系列車型加速交付
- 研究人員開(kāi)發(fā)出新型多功能電池陰極材料
- 特斯拉中國(guó)大陸首批V4超級(jí)充電樁上線
- 方向盤(pán)消失前夜:特斯拉、百度、哈啰三巨頭的Robotaxi戰(zhàn)爭(zhēng)
- 均普智能人形機(jī)器人開(kāi)賣,拿下約3000萬(wàn)元訂單
- 博世推出超低功耗全集成MEMS傳感器
- 中穎電子:貿(mào)易戰(zhàn)升級(jí),加速了芯片國(guó)產(chǎn)化進(jìn)程
- 羅永浩談蘋(píng)果設(shè)計(jì)師離職:他不是蘋(píng)果靈魂設(shè)計(jì)師
- 蘋(píng)果、大陸嘉實(shí)基金擬投3億美元
- 國(guó)內(nèi)唯一有ASML曝光機(jī)的光刻膠企業(yè),科華微電子獲投資1.7億
- 新華三:在成都投入合計(jì)70億元,半導(dǎo)體技術(shù)公司兩年投產(chǎn)
- 科幻變現(xiàn)實(shí) 人工智能走進(jìn)尋常百姓家
- 福特設(shè)計(jì)師可以用VR技術(shù)在世界各地聯(lián)手設(shè)計(jì)汽車了
- 純電動(dòng)車需要怎樣的車載娛樂(lè)系統(tǒng)?
- 輕量級(jí)AR眼鏡的四種6DoF方案對(duì)比
- 自動(dòng)駕駛明年到來(lái) 特斯拉車款升級(jí):全面使用自研處理器
- 如何在ADS1.2開(kāi)發(fā)環(huán)境下,進(jìn)行C語(yǔ)言編程,在立宇泰2410開(kāi)發(fā)板上實(shí)現(xiàn)聲音的錄制和播放功能。想尋求相關(guān)的經(jīng)驗(yàn)和程序,謝謝!
- 存在
- eVC里,怎樣調(diào)用Windows media player(系統(tǒng)已有)來(lái)播放一段mp3音樂(lè)?
- 【 ST NUCLEO-G071RB測(cè)評(píng)】_05_系統(tǒng)時(shí)鐘配置以及串口實(shí)現(xiàn)的俄羅斯方塊游戲
- 專利費(fèi)拖欠后續(xù) 高通小米達(dá)成協(xié)議
- Hercules DIY 十一:第二路調(diào)試成功
- 7.5kV·A單相航空靜止變流器的研制
- 大家給點(diǎn)建議吧
- 設(shè)計(jì)基于MSP430單片機(jī)的微功耗中文人機(jī)界面
- WinCE 5.0的編譯問(wèn)題