0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F429芯片帶FIFO的DMA傳輸實(shí)現(xiàn)過程

茶話MCU ? 來源:ST MCU 信息交流 ? 作者:ST MCU 信息交流 ? 2020-09-04 14:36 ? 次閱讀

STM32系列芯片都內(nèi)置DMA外設(shè),其中很多系列的DMA配備了FIFO。這里以STM32F429芯片及開發(fā)板為例,演示一下帶FIFO的DMA傳輸實(shí)現(xiàn)過程。

大致情況是這樣的,我用TIMER1通道1的比較事件觸發(fā)DMA,將內(nèi)存數(shù)據(jù)寫進(jìn)UART5的數(shù)據(jù)發(fā)送寄存器DR,并將UART5的TX/RX腳物理短接,同時(shí)開啟UART5的DMA接收模式,即DMA將UART5接收到的數(shù)據(jù)寫到指定的接收內(nèi)存區(qū)。下面重點(diǎn)介紹UART5的DMA方式的接收過程。

首先使用STM32CubeMx完成基本配置。

下面是關(guān)于TIM1的相關(guān)配置,使用通道1的比較事件觸發(fā)DMA,將內(nèi)存數(shù)據(jù)寫入U(xiǎn)ART的發(fā)送數(shù)據(jù)寄存器。為什么還要搞個(gè)定時(shí)器來觸發(fā),其中一個(gè)原因是為了后面好演示結(jié)果。

下面是關(guān)于UART5的基本配置,并開啟其接收的DMA傳輸。此時(shí)配置還沒有使用FIFO.

添加用戶代碼。代碼基于STM32Cube庫而準(zhǔn)備,這里發(fā)送端發(fā)送17個(gè)字節(jié)數(shù)據(jù)出來。

我們不妨先看看基于上面不使用FIFO的配置,即使用DMA 直接傳輸時(shí)的運(yùn)行結(jié)果。

在演示基于FIFO的DMA應(yīng)用結(jié)果之前,不妨簡單介紹下FIFO的結(jié)構(gòu)以及DMA傳輸過程中使用它有什么好處。

對于STM32F4來講,每個(gè)DMA stream都有4個(gè)字的FIFO可用。它用來暫存來自DMA源端的數(shù)據(jù),每當(dāng)FIFO里存放的數(shù)據(jù)達(dá)到設(shè)定的閾值后,數(shù)據(jù)就會(huì)被移走。閾值可以設(shè)置為從1個(gè)字到4個(gè)字的深度。

啟用DMA的FIFO可以最大程度地避免數(shù)據(jù)傳輸過程中的溢出問題,可以減少DMA對內(nèi)存的訪問次數(shù)從而減少總線訪問競爭,通過BURST分組傳輸優(yōu)化傳輸帶寬以提升芯片性能。利用FIFO,通過對源端/目標(biāo)端的數(shù)據(jù)進(jìn)行打包或拆包以適應(yīng)不同數(shù)據(jù)寬度的訪問需求.讓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)行上面代碼,我們可看到來自源端的4個(gè)Byte被封裝成1個(gè)word字。數(shù)據(jù)會(huì)按字方式逐一寫入內(nèi)存?!緸榭葱Ч?,我將定時(shí)器的觸發(fā)放慢后做多次截圖】

不過,按照上面方式將4個(gè)字節(jié)封裝成一個(gè)字的傳輸過程中如果發(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拍。儼如音樂里的節(jié)拍,4拍1節(jié)、8拍1節(jié)之類的。對于每1節(jié)內(nèi)的數(shù)據(jù)傳輸,DMA對總線的占用不會(huì)被總線矩陣仲裁器解除或打斷,以保證每節(jié)數(shù)據(jù)的可靠完成。

我們還是以上面的應(yīng)用為例,調(diào)整配置并開啟BURST模式后具體看看。

我對memory端,也就是這里的目的端啟用了BURST節(jié)拍傳輸。因?yàn)镕IFO深度為1個(gè)字,每次源端數(shù)據(jù)剛好達(dá)到FIFO閾值水平時(shí),通過1節(jié)4拍即可傳輸完畢,每拍對應(yīng)1個(gè)byte的傳輸?;贐USRT模式配置可以實(shí)現(xiàn)跟上面Single模式下同樣的效果,而且數(shù)據(jù)傳輸更有保障。通過下圖可以看出DMA按節(jié)進(jìn)行傳輸,每節(jié)傳輸4個(gè)數(shù)據(jù)。

針對上述應(yīng)用,我們還可以再次調(diào)整burst配置,比如下面的樣子:

此時(shí)FIFO閾值為2個(gè)字,源端Memory的數(shù)據(jù)訪問寬度為半字,Burst大小為4。這樣的話,源端數(shù)據(jù)達(dá)到FIFO閾值時(shí),4個(gè)半字?jǐn)?shù)據(jù)組成1節(jié)分四拍傳輸完成,其中每拍傳輸半字?jǐn)?shù)據(jù)。我們同樣看看慢動(dòng)作后的結(jié)果。

順便提醒下,我們在做基于FIFO的burst模式的DMA傳輸時(shí),BURST的大小乘以數(shù)據(jù)大小不得超過設(shè)置的FIFO閾值大小,否則會(huì)出錯(cuò)。比方以剛才上面的配置來看。

FIFO閾值為2個(gè)字,即8字節(jié)。數(shù)據(jù)寬度為半字,即2字節(jié),Burst大小為4。完全合規(guī)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    386

    瀏覽量

    43496
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    556

    瀏覽量

    100347
  • STM32F429
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    10616

原文標(biāo)題:STM32帶FIFO的DMA傳輸應(yīng)用示例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32F429的USART應(yīng)用之八個(gè)串口FIFO實(shí)現(xiàn)

    STM32F429的USART應(yīng)用之八個(gè)串口FIFO實(shí)現(xiàn),第24章 STM32F429的USART應(yīng)用之八個(gè)串口FIFO
    發(fā)表于 08-10 06:25

    STM32F429的GPIO應(yīng)用之按鍵FIFO

    第19章 STM32F429的GPIO應(yīng)用之按鍵FIFO本章教程為大家介紹STM32F429的GPIO應(yīng)用之按鍵FIFO,這個(gè)方案已經(jīng)在實(shí)際項(xiàng)目中千錘百煉,比較實(shí)用。目錄第19章
    發(fā)表于 08-10 07:55

    如何去正確使用STM32F429DMA串口呢

    如何對STM32F429 DMA串口數(shù)據(jù)進(jìn)行配置?如何去正確使用STM32F429DMA串口呢?
    發(fā)表于 12-06 07:04

    STM32F429中文手冊

    STM32F429中文手冊
    發(fā)表于 03-10 17:38 ?723次下載

    "【STM32F429開發(fā)板用戶手冊】第36章 STM32F429的FMC總線應(yīng)用之DMA雙緩沖驅(qū)動(dòng)AD7606(8通道同步采樣, 16bit, 正負(fù)

    "【STM32F429開發(fā)板用戶手冊】第36章 STM32F429的FMC總線應(yīng)用之DMA雙緩沖驅(qū)動(dòng)AD7606(8通道同步采樣, 16bit, 正負(fù)10V)"
    發(fā)表于 11-22 10:06 ?18次下載
    "【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第36章 <b class='flag-5'>STM32F429</b>的FMC總線應(yīng)用之<b class='flag-5'>DMA</b>雙緩沖驅(qū)動(dòng)AD7606(8通道同步采樣, 16bit, 正負(fù)

    STM32F429開發(fā)板用戶手冊】第13章 STM32F429啟動(dòng)過程詳解

    STM32F429開發(fā)板用戶手冊】第13章 STM32F429啟動(dòng)過程詳解
    發(fā)表于 11-23 18:06 ?39次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第13章     <b class='flag-5'>STM32F429</b>啟動(dòng)<b class='flag-5'>過程</b>詳解

    STM32F429開發(fā)板用戶手冊】第21章 STM32F429的NVIC中斷分組和配置(重要)

    STM32F429開發(fā)板用戶手冊】第21章 STM32F429的NVIC中斷分組和配置(重要)
    發(fā)表于 12-04 13:36 ?17次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第21章 <b class='flag-5'>STM32F429</b>的NVIC中斷分組和配置(重要)

    STM32F429開發(fā)板用戶手冊】第1章 初學(xué)STM32F429的準(zhǔn)備工作

    STM32F429開發(fā)板用戶手冊】第1章 初學(xué)STM32F429的準(zhǔn)備工作
    發(fā)表于 12-04 13:51 ?20次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第1章 初學(xué)<b class='flag-5'>STM32F429</b>的準(zhǔn)備工作

    STM32F429開發(fā)板用戶手冊】第8章 STM32F429的終極調(diào)試組件Event Recorder

    STM32F429開發(fā)板用戶手冊】第8章 STM32F429的終極調(diào)試組件Event Recorder
    發(fā)表于 12-04 14:06 ?17次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第8章 <b class='flag-5'>STM32F429</b>的終極調(diào)試組件Event Recorder

    STM32F429開發(fā)板用戶手冊】第19章 STM32F429的GPIO應(yīng)用之按鍵FIFO

    STM32F429開發(fā)板用戶手冊】第19章 STM32F429的GPIO應(yīng)用之按鍵FIFO
    發(fā)表于 12-05 15:21 ?14次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第19章 <b class='flag-5'>STM32F429</b>的GPIO應(yīng)用之按鍵<b class='flag-5'>FIFO</b>

    STM32F429開發(fā)板用戶手冊】第14章 STM32F429的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32F429開發(fā)板用戶手冊】第14章 STM32F429的電源,復(fù)位和時(shí)鐘系統(tǒng)
    發(fā)表于 12-08 15:51 ?13次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第14章 <b class='flag-5'>STM32F429</b>的電源,復(fù)位和時(shí)鐘系統(tǒng)

    STM32f429外部中斷配置解析基于HAL庫

    STM32f429外部中斷配置解析基于HAL庫
    發(fā)表于 12-16 16:58 ?9次下載
    <b class='flag-5'>STM32f429</b>外部中斷配置解析基于HAL庫

    STM32F429開發(fā)板用戶手冊】第24章 STM32F429的USART應(yīng)用之八個(gè)串口FIFO實(shí)現(xiàn)

    最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255第24章 STM32F429的USART應(yīng)用之八個(gè)串口FIFO實(shí)現(xiàn)
    發(fā)表于 12-27 18:44 ?10次下載
    【<b class='flag-5'>STM32F429</b>開發(fā)板用戶手冊】第24章 <b class='flag-5'>STM32F429</b>的USART應(yīng)用之八個(gè)串口<b class='flag-5'>FIFO</b><b class='flag-5'>實(shí)現(xiàn)</b>

    調(diào)試 STM32F429 + USB3300

    調(diào)試 STM32F429 + USB3300調(diào)試 STM32F429 + USB3300 工作在HS模式調(diào)試 STM32F429 + USB3300 工作在HS模式這兩天調(diào)試基于STM32F4
    發(fā)表于 12-28 19:44 ?123次下載
    調(diào)試 <b class='flag-5'>STM32F429</b> + USB3300

    STM32F429與陶晶馳串口屏數(shù)據(jù)傳輸(1)

    stm32f429 串口屏接收
    發(fā)表于 01-12 18:27 ?17次下載
    <b class='flag-5'>STM32F429</b>與陶晶馳串口屏數(shù)據(jù)<b class='flag-5'>傳輸</b>(1)