問題1、
用戶使用STM32G473RET6芯片,開發(fā)環(huán)境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全傳輸中斷里,拷貝ADC采集的數(shù)據(jù)。在應用過程中發(fā)現(xiàn)DMA半傳輸中斷和完全傳輸中斷不能獨立使用。
具體體現(xiàn):
1、在DMA1初始化時,打開了半傳輸中斷,關閉完全傳輸中斷,照樣能觸發(fā)完全傳輸中斷
LL_DMA_EnableIT_HT(DMA1,LL_DMA_CHANNEL_1);//打開DMA1半傳輸中斷
LL_DMA_DisableIT_TC(DMA1,LL_DMA_CHANNEL_1);//關閉DMA1完全傳輸中斷
2、在DMA1初始化時,關閉了半傳輸中斷,打開完全傳輸中斷,照樣能觸發(fā)半傳輸中斷
LL_DMA_EnableIT_TC(DMA1,LL_DMA_CHANNEL_1);//打開DMA1完全傳輸中斷
LL_DMA_DisableIT_HC(DMA1,LL_DMA_CHANNEL_1);//關閉DMA1半傳輸中斷
這個問題很讓他很困惑,想知道怎么回事。
關于這個問題,我們在操作DMA相關的使能位或做相關傳輸長度配置時,一定要注意他們往往要求在DMA通道未被使能的前提下進行【具體閱讀芯片手冊】。現(xiàn)在的問題是,他想對DMA傳輸中斷使能位進行改寫,依然也有這個前提。見下圖黃色高亮內(nèi)容,即當相應DMA通道被使能時,是不接受對相應DMA通道的傳輸完成和半完成中斷使能的改寫。
換言之,這里若要對相應中斷使能位進行改寫,得先將DMA通道使能位【EN位】進行清零。使用LL庫的話就調(diào)用LL_DMA_DisableChannel()函數(shù)實現(xiàn),修改相應中斷使能位之后再將DMA通道打開,即調(diào)用LL_DMA_EnableChannel()函數(shù)。
問題2、用戶使用STM32G431芯片,用到TIMER1的PWM功能,并啟用基于TIMER事件的DMA Burst傳輸實現(xiàn)4個比較通道寄存器的批量修改。使用CubeMx進行配置。配置時發(fā)現(xiàn)一點疑惑,為什么外設端不需地址自增的勾選。
現(xiàn)在用戶的具體情況就是利用TIMER更新事件觸發(fā)DMA請求,每次更新事件觸發(fā)DMA將4個內(nèi)存數(shù)據(jù)轉(zhuǎn)發(fā)給定時器的4個CCR寄存器。
按照客戶的理解,在做DMA配置時這里的外設地址也應該勾選自增才對,可事實發(fā)現(xiàn)不勾選才結果正常,若選擇外設地址自增了反而異常。
ST公司設計人員為了滿足DMA對TIMER寄存器批量訪問,還特別設計了2個寄存器,分別是TIMx_DCR和TIMx_DMAR。其中,DCR寄存器由DBL和DBA字段組成。
DBA:被訪問的第一個定時器寄存器相對于定時器地址映射表中的TIMx_CR1的地址偏移量【偏移量從0開始計算】。
DBL:每組批量訪問的寄存器個數(shù)【從0開始計算】。DMA訪問DMAR寄存器時,按照如下算式得到絕對地址實現(xiàn)對寄存器的逐個訪問。(TIM2_CR1address) + (DBA + DMA?index)x 4。
對于定時器DMA BURST傳輸,外設地址就是TIM2_DMAR寄存器的地址。DMA根據(jù)上面地址算式實現(xiàn)對多個TIMER寄存器的訪問。TIM2_DMAR寄存器地址本身是固定的,無須增減,所以基于定時器事件DMA Burst模式配置外設時不要做地址自增勾選。
當然,上面需求也可以基于非Burst模式來完成。假設還是基于4個內(nèi)存數(shù)據(jù)修改4個CCR寄存器,此時則需要4次定時器事件觸發(fā)DMA請求,做DMA配置時需要將內(nèi)存端和外設端都選擇地址自增模式。基于CubeMx的參考配置如下:
當然,相應API函數(shù)也跟Burst模式下的也不一樣【這里依然使用更新事件申請DMA】。 HAL_DMA_Start_IT(&hdma_tim1_up,(uint32_t)T1_CCRData, (uint32_t)&htim1.Instance->CCR1,4); 下面是兩種不同訪問模式下的示意圖,圖示可能更直觀些。
好,今天的分享就到這里,下次再聊。
上一篇:stm32是什么,它有哪些優(yōu)勢
下一篇:stm32ad采樣測電壓范圍
推薦閱讀最新更新時間:2025-06-07 23:38


設計資源 培訓 開發(fā)板 精華推薦
- 意法半導體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動尾門應用 國產(chǎn)車規(guī)級高壓霍爾效應傳感器推薦
- 突發(fā)!又一車企車機“崩了”
- 寧德時代為陳立泉院士頒發(fā)“卓越貢獻獎”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會重點
- 2025年1-4月ADAS供應商裝機量排行榜:頭部集中與國產(chǎn)突圍并存
- 國內(nèi)飛行汽車無線通信測試成功,通信安全新突破
- SPAD席卷車載激光雷達市場
- 大聯(lián)大品佳集團推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級像素大燈方案
- 哈曼推出采用三星Neo QLED技術的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術 提升車輛安全性和用戶體驗