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

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

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

STM32定時器觸發(fā)DMA數(shù)據(jù)傳輸失敗的原因如何解決

茶話MCU ? 來源:未知 ? 作者:易水寒 ? 2018-11-25 09:21 ? 次閱讀

有人使用STM32定時器事件觸發(fā)DMA,讓其將內(nèi)存數(shù)據(jù)傳輸?shù)?a href="http://www.wenjunhu.com/v/tag/1301/" target="_blank">通信外設(shè)的數(shù)據(jù)寄存器進行發(fā)送,發(fā)現(xiàn)DMA根本就不動作。

比方以基于STM32F411的芯片為例,通過TIM3更新事件觸發(fā)DMA請求,DMA從內(nèi)存將數(shù)據(jù)送到SPI1?的數(shù)據(jù)寄存器,從而完成數(shù)據(jù)發(fā)送。

他采用CubeMx進行配置?;九渲萌缦拢篬文中圖片可以放大觀看]

?

相關(guān)用戶實現(xiàn)代碼如下:

從配置過程和代碼實現(xiàn)來看,似乎都沒有問題。那DMA怎么就是不動作呢?

問題出在我們使用上面的函數(shù)做DMA傳輸所關(guān)聯(lián)源端和目標端時,出現(xiàn)了想當(dāng)然的情況。

我們利用TIMER事件來作為DMA請求源時,而作為數(shù)據(jù)傳輸?shù)脑炊嘶蚰康亩?,都是我們用戶指定的。這時就一定要注意源端和目標端是當(dāng)前DMA流所支持的。否則就會出現(xiàn)亂點鴛鴦譜,DMA根本可能就跑不起來。就像你叫了某快遞公司,它的服務(wù)范圍是相對固定的,并非你想去哪里她就能服務(wù)到哪里。

比方上面的例子,如果改成SPI2就沒問題。為什么剛才SPI1不行呢,因為DMA1根本訪問不到SPI1,我們不妨看看基于STM32F411芯片的內(nèi)部功能及總線框圖就很清晰了。

從上圖不難看出DMA1是訪問不到SPI1或SPI4這些外設(shè)的,或者說DMA1就沒法訪問掛在APB2總線上的外設(shè),只能訪問APB1總線上的外設(shè)。

小結(jié):一般來講,基于某觸發(fā)事件,對應(yīng)的DMA數(shù)據(jù)流就可以確定下來了,那該DMA數(shù)據(jù)流的傳輸范圍往往也隨之確定。我們在為該DMA數(shù)據(jù)流指定源端和目標端時一定要符合其傳輸范圍,否則會出現(xiàn)傳輸無法完成的情形。換言之,我們在做DMA傳輸時,為了實現(xiàn)DMA的有效傳輸,往往需要結(jié)合源端和目的端來調(diào)整或選擇合適的DMA數(shù)據(jù)流。結(jié)合前面的比方,如果這家快遞公司到不了,我們換一家可能就輕松解決了。

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

    關(guān)注

    2287

    文章

    10988

    瀏覽量

    361676
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3275

    瀏覽量

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

    關(guān)注

    3

    文章

    569

    瀏覽量

    102133

原文標題:定時器觸發(fā)DMA數(shù)據(jù)傳輸失敗之案例

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

收藏 0人收藏

    評論

    相關(guān)推薦
    熱點推薦

    STM32通過DMA方式傳輸TIM3定時器計數(shù)值,數(shù)值重復(fù)是為什么?

    AD值防止數(shù)據(jù)錯亂,故DMA配置必須放在ADC之前。) 因此為了排除相同原因導(dǎo)致的數(shù)據(jù)重復(fù),所以將DMA配置放在TIM3
    發(fā)表于 04-10 06:50

    STM32F103定時器觸發(fā)ADC+DMA傳輸 精選資料分享

    STM32F103定時器觸發(fā)ADC+DMA傳輸ADC除了軟件觸發(fā)方式之外還有外部
    發(fā)表于 08-11 06:05

    stm32 定時器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)相關(guān)資料下載

    stm32g0 定時器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)stm32g0
    發(fā)表于 02-15 06:46

    stm32數(shù)據(jù)傳輸的相關(guān)資料分享

    簡介DMA,全稱Direct Memory Access,即直接存儲訪問。DMA傳輸數(shù)據(jù)從一個地址空間復(fù)制到另一個地址空間,提供在外設(shè)和
    發(fā)表于 02-22 06:58

    DMA進行數(shù)據(jù)傳輸和CPU進行數(shù)據(jù)傳輸的疑問

    求大佬解答,本人正在學(xué)習(xí)STM32單片機中DMA直接數(shù)據(jù)存儲部分的內(nèi)容 看了DMA簡介后,也上手過實例代碼,但是沒有實際的項目經(jīng)驗,所以有以下疑問:
    發(fā)表于 05-25 17:18

    DMA數(shù)據(jù)傳輸(源代碼分享)

    手頭項目也需要加入DMA數(shù)據(jù)傳輸,以最大限度地提升CPU效率,于是測試了一下XMEGA的DMA模塊,把一塊內(nèi)存中的數(shù)據(jù)DMA
    的頭像 發(fā)表于 04-27 09:22 ?9488次閱讀

    DMA數(shù)據(jù)傳輸在SPEAR300實現(xiàn)高速串口驅(qū)動設(shè)計

    DMA數(shù)據(jù)傳輸無需CPU的參與,是一種更加高效的數(shù)據(jù)傳輸方式?,F(xiàn)有的DMA數(shù)據(jù)傳輸方案都是基于DMA
    發(fā)表于 04-04 12:23 ?1745次閱讀
    <b class='flag-5'>DMA</b><b class='flag-5'>數(shù)據(jù)傳輸</b>在SPEAR300實現(xiàn)高速串口驅(qū)動設(shè)計

    測試代碼中使用DMA傳輸,定時器觸發(fā)ADC

    現(xiàn)在共用到ADC1模塊的4個ADC通道,即1個片內(nèi)Vrefint通道和其它三個外部通道CH8,CH10,CH17。下面測試代碼中使用DMA傳輸,定時器觸發(fā)ADC.
    的頭像 發(fā)表于 08-10 16:22 ?4741次閱讀
    測試代碼中使用<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>,<b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>ADC

    STM32CUBEMX配置教程(十二)STM32定時器觸發(fā)的固定頻率ADC采樣(使用DMA

    STM32CUBEMX配置教程(十二)STM32定時器觸發(fā)的固定頻率ADC采樣(使用DMA
    發(fā)表于 11-24 13:51 ?86次下載
    <b class='flag-5'>STM32</b>CUBEMX配置教程(十二)<b class='flag-5'>STM32</b>的<b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>的固定頻率ADC采樣(使用<b class='flag-5'>DMA</b>)

    STM32CUBEMX配置教程(十三)STM32定時器觸發(fā)的固定頻率DAC輸出(使用DMA

    STM32CUBEMX配置教程(十三)STM32定時器觸發(fā)的固定頻率DAC輸出(使用DMA
    發(fā)表于 11-24 14:06 ?47次下載
    <b class='flag-5'>STM32</b>CUBEMX配置教程(十三)<b class='flag-5'>STM32</b>的<b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>的固定頻率DAC輸出(使用<b class='flag-5'>DMA</b>)

    STM32F103定時器觸發(fā)ADC+DMA傳輸

    STM32F103定時器觸發(fā)ADC+DMA傳輸ADC除了軟件觸發(fā)方式之外還有外部
    發(fā)表于 11-30 10:36 ?57次下載
    <b class='flag-5'>STM32</b>F103<b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>ADC+<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>

    H743定時器觸發(fā)ADC轉(zhuǎn)換DMA傳輸之應(yīng)用

    學(xué)習(xí)安富萊的H743的定時器觸發(fā)ADC DMA傳輸源碼
    發(fā)表于 11-30 11:21 ?12次下載
    H743<b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>ADC轉(zhuǎn)換<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>之應(yīng)用

    stm32 定時器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)

    stm32g0 定時器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)stm32g0
    發(fā)表于 12-16 16:56 ?72次下載
    <b class='flag-5'>stm32</b> <b class='flag-5'>定時器</b><b class='flag-5'>觸發(fā)</b>ADC多通道采樣+<b class='flag-5'>DMA</b>提取<b class='flag-5'>數(shù)據(jù)</b>

    STM32CubeMX-串口開啟DMA進行數(shù)據(jù)傳輸

    STM32CubeMX筆記-串口開啟DMA進行數(shù)據(jù)傳輸
    發(fā)表于 12-27 18:40 ?7次下載
    <b class='flag-5'>STM32</b>CubeMX-串口開啟<b class='flag-5'>DMA</b>進行<b class='flag-5'>數(shù)據(jù)傳輸</b>

    stm32數(shù)據(jù)傳輸

    簡介DMA,全稱Direct Memory Access,即直接存儲訪問。DMA傳輸數(shù)據(jù)從一個地址空間復(fù)制到另一個地址空間,提供在外設(shè)和
    發(fā)表于 12-28 19:08 ?8次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>數(shù)據(jù)傳輸</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品