<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

STM32 DMA傳輸的問題分析

茶話MCU ? 來源:茶話MCU ? 2023-12-01 09:19 ? 次閱讀

問題1、

用戶使用STM32G473RET6芯片,開發環境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全傳輸中斷里,拷貝ADC采集的數據。在應用過程中發現DMA半傳輸中斷和完全傳輸中斷不能獨立使用。

具體體現:
1、在DMA1初始化時,打開了半傳輸中斷,關閉完全傳輸中斷,照樣能觸發完全傳輸中斷
LL_DMA_EnableIT_HT(DMA1,LL_DMA_CHANNEL_1);//打開DMA1半傳輸中斷
LL_DMA_DisableIT_TC(DMA1,LL_DMA_CHANNEL_1);//關閉DMA1完全傳輸中斷
2、在DMA1初始化時,關閉了半傳輸中斷,打開完全傳輸中斷,照樣能觸發半傳輸中斷
LL_DMA_EnableIT_TC(DMA1,LL_DMA_CHANNEL_1);//打開DMA1完全傳輸中斷
LL_DMA_DisableIT_HC(DMA1,LL_DMA_CHANNEL_1);//關閉DMA1半傳輸中斷

這個問題很讓他很困惑,想知道怎么回事。

關于這個問題,我們在操作DMA相關的使能位或做相關傳輸長度配置時,一定要注意他們往往要求在DMA通道未被使能的前提下進行【具體閱讀芯片手冊】?,F在的問題是,他想對DMA傳輸中斷使能位進行改寫,依然也有這個前提。見下圖黃色高亮內容,即當相應DMA通道被使能時,是不接受對相應DMA通道的傳輸完成和半完成中斷使能的改寫。

3c31184e-8f7a-11ee-939d-92fbcf53809c.png

換言之,這里若要對相應中斷使能位進行改寫,得先將DMA通道使能位【EN位】進行清零。使用LL庫的話就調用LL_DMA_DisableChannel()函數實現,修改相應中斷使能位之后再將DMA通道打開,即調用LL_DMA_EnableChannel()函數。

3c7126be-8f7a-11ee-939d-92fbcf53809c.png

問題2、用戶使用STM32G431芯片,用到TIMER1的PWM功能,并啟用基于TIMER事件的DMA Burst傳輸實現4個比較通道寄存器的批量修改。使用CubeMx進行配置。配置時發現一點疑惑,為什么外設端不需地址自增的勾選。

3c831ab8-8f7a-11ee-939d-92fbcf53809c.png

現在用戶的具體情況就是利用TIMER更新事件觸發DMA請求,每次更新事件觸發DMA將4個內存數據轉發給定時器的4個CCR寄存器。

3c985a36-8f7a-11ee-939d-92fbcf53809c.png

按照客戶的理解,在做DMA配置時這里的外設地址也應該勾選自增才對,可事實發現不勾選才結果正常,若選擇外設地址自增了反而異常。

3cb7314a-8f7a-11ee-939d-92fbcf53809c.png

3cddd4d0-8f7a-11ee-939d-92fbcf53809c.png

ST公司設計人員為了滿足DMA對TIMER寄存器批量訪問,還特別設計了2個寄存器,分別是TIMx_DCR和TIMx_DMAR。其中,DCR寄存器由DBL和DBA字段組成。

DBA:被訪問的第一個定時器寄存器相對于定時器地址映射表中的TIMx_CR1的地址偏移量【偏移量從0開始計算】。

DBL:每組批量訪問的寄存器個數【從0開始計算】。DMA訪問DMAR寄存器時,按照如下算式得到絕對地址實現對寄存器的逐個訪問。(TIM2_CR1address) + (DBA + DMA?index)x 4。

對于定時器DMA BURST傳輸,外設地址就是TIM2_DMAR寄存器的地址。DMA根據上面地址算式實現對多個TIMER寄存器的訪問。TIM2_DMAR寄存器地址本身是固定的,無須增減,所以基于定時器事件DMA Burst模式配置外設時不要做地址自增勾選。

當然,上面需求也可以基于非Burst模式來完成。假設還是基于4個內存數據修改4個CCR寄存器,此時則需要4次定時器事件觸發DMA請求,做DMA配置時需要將內存端和外設端都選擇地址自增模式?;贑ubeMx的參考配置如下:

3d008994-8f7a-11ee-939d-92fbcf53809c.png

當然,相應API函數也跟Burst模式下的也不一樣【這里依然使用更新事件申請DMA】。 HAL_DMA_Start_IT(&hdma_tim1_up,(uint32_t)T1_CCRData, (uint32_t)&htim1.Instance->CCR1,4); 下面是兩種不同訪問模式下的示意圖,圖示可能更直觀些。

3d372936-8f7a-11ee-939d-92fbcf53809c.png

好,今天的分享就到這里,下次再聊。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    95

    文章

    5681

    瀏覽量

    540255
  • STM32
    +關注

    關注

    2245

    文章

    10688

    瀏覽量

    349671
  • 中斷
    +關注

    關注

    5

    文章

    884

    瀏覽量

    41067
  • dma
    dma
    +關注

    關注

    3

    文章

    539

    瀏覽量

    99305
  • stm32cubemx
    +關注

    關注

    5

    文章

    269

    瀏覽量

    14485

原文標題:關于STM32 DMA傳輸的兩個問題釋疑

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

收藏 人收藏

    評論

    相關推薦

    使用STM32自帶DMA傳輸數據

    使用STM32自帶DMA傳輸數據,可以減輕CPU負擔,只需設置一些參數即可發送想要發送的數據,以下是STM32F1系列芯片測試過的部分代碼,可實現D
    發表于 08-17 06:30

    STM32_DMA應用與性能分析

    很好的一份關于STM32DMA分析資料,可以給開發者一個借鑒
    發表于 07-01 16:45 ?7次下載

    STM32 DMA應用與性能分析

    STM32 DMA應用與性能分析 學習資料,感興趣的小伙伴們可以瞧一瞧。
    發表于 09-06 17:33 ?11次下載

    STM32定時器觸發DMA數據傳輸失敗的原因如何解決

    有人使用STM32的定時器事件觸發DMA,讓其將內存數據傳輸到通信外設的數據寄存器進行發送,發現DMA根本就不動作。
    的頭像 發表于 11-25 09:21 ?2w次閱讀
    <b class='flag-5'>STM32</b>定時器觸發<b class='flag-5'>DMA</b>數據<b class='flag-5'>傳輸</b>失敗的原因如何解決

    STM32F4系列的DMA請求與DMA傳輸通道的映射關系多了些選擇性,靈活性

    簡單點說,它是DMA請求中轉調度器,或說DMA請求路由器?;竟δ芫褪菍⒏髀?b class='flag-5'>DMA請求經過它的再分配調度后連接到相應的DMA控制器傳輸通道以
    的頭像 發表于 06-04 14:59 ?1.2w次閱讀

    STM32F429芯片帶FIFO的DMA傳輸實現過程

    STM32系列芯片都內置DMA外設,其中很多系列的DMA配備了FIFO。這里以STM32F429芯片及開發板為例,演示一下帶FIFO的DMA
    的頭像 發表于 09-04 14:36 ?6221次閱讀
    <b class='flag-5'>STM32</b>F429芯片帶FIFO的<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>實現過程

    STM32學習之DMA 直接寄存器讀取

    關于STM32學習分享第六章 DMA 直接寄存器讀取文章目錄關于STM32學習分享前言二、代碼1.dma_mtm.c2.dma_mtm.h3.main.c總結前言開始!開始!單片機的輸
    發表于 12-16 16:58 ?13次下載
    <b class='flag-5'>STM32</b>學習之<b class='flag-5'>DMA</b> 直接寄存器讀取

    STM32基礎-----DMA

    STM32基礎-------DMA
    發表于 12-20 19:35 ?10次下載
    <b class='flag-5'>STM32</b>基礎-----<b class='flag-5'>DMA</b>

    STM32CubeMX-串口開啟DMA進行數據傳輸

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

    DMA】淺談STM32F4xx的DMA(附初始化代碼)

    訪問這次分析的是STM32F4xx系列的DMA,需要注意的是F4系列的DMA和F1系列的DMA在結構上有所不同!
    發表于 01-17 09:59 ?2次下載
    【<b class='flag-5'>DMA</b>】淺談<b class='flag-5'>STM32</b>F4xx的<b class='flag-5'>DMA</b>(附初始化代碼)

    STM32F10XXX使用DMA傳輸ADC轉換的數據

    STM32F10XXX使用DMA傳輸ADC轉換的數據教程說明。
    發表于 04-24 10:12 ?6次下載

    STM32U59 SPI DMA發送未產生傳輸完成中斷問題分析

    某客戶發現修改代碼后,STM32U59 SPI DMA 發送未產生傳輸完成中斷,但修改的代碼跟 SPI 以及 DMA 毫無關聯。
    的頭像 發表于 09-01 12:11 ?4749次閱讀

    DMA帶中斷的內存到內存傳輸

    : ? ? 現在按以下鍵生成代碼:Ctrl + S 4.1 HAL 庫 DMA 與 IT 流程↑ DMA 初始化在main.c中生成。 HAL_DMA_Start_IT:開始DMA緩沖
    發表于 03-23 15:23 ?2073次閱讀
    <b class='flag-5'>DMA</b>帶中斷的內存到內存<b class='flag-5'>傳輸</b>

    STM32F1的DMA使用

    在前面我們提到過 DMA,這一章我們就來學習 STM32F1 的DMA 使 用。要實現的功能是:通過 K_UP 按鍵控制 DMA 串口 1 數據的傳送,在傳送過程中讓 D2 指示燈不斷
    的頭像 發表于 06-22 10:23 ?1773次閱讀
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>DMA</b>使用

    STM32DMA的五大問題

    1,DMA控制器的內部結構STM32中的DMA控制器是一種用于在外設和存儲器之間傳輸數據的專用硬件。DMA控制器的內部結構主要包括以下幾個關
    的頭像 發表于 12-10 08:00 ?908次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>DMA</b>的五大問題
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>