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

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

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

定時(shí)器DMA Burst傳輸無法實(shí)現(xiàn)

麥辣雞腿堡 ? 來源:茶話MCU ? 作者:茶話MCU ? 2023-06-21 16:21 ? 次閱讀

有人使用STM32F4系列開發(fā)產(chǎn)品,程序運(yùn)行過程中需要不時(shí)地對(duì)外輸出一串驅(qū)動(dòng)脈沖,并要求這幾串脈沖的頻率可變、占空比固定。他想到使用基于STM32定時(shí)器DMA

BURST傳輸。具體點(diǎn)說,他期望不時(shí)地通過TIM3的CH1輸出一串頻率可變、占空比固定的脈沖然后停下來。這個(gè)思路在原理上是沒問題的,可是他在測(cè)試過程中發(fā)現(xiàn)怎么也折騰不出預(yù)期的效果。

他目前使用的芯片是STM32F401,雖有點(diǎn)老舊,但我查看了手冊(cè),確認(rèn)該芯片的TIM3是支持基于TIMER事件實(shí)現(xiàn)TIME寄存器與內(nèi)存間的DMABURST傳輸?shù)?。即每個(gè)TIMER事件可以申請(qǐng)多個(gè)DMA請(qǐng)求從而實(shí)現(xiàn)定時(shí)器寄存器與內(nèi)存間的批量數(shù)據(jù)傳輸。要知某個(gè)STM32
TIMER是否支持上述功能,只需查看STM32參考手冊(cè)的相關(guān)定時(shí)器的寄存器中有無TIMx_DCR和TIMx_DMAR寄存器的介紹。

圖片

既然支持,為什么實(shí)現(xiàn)不了呢?關(guān)于這個(gè)功能我們還需要注意幾點(diǎn):

1、所選擇的TIMER必須支持基于定時(shí)器事件的DMA BURST傳輸功能。

2、觸發(fā)事件必須是來自參與DMA傳輸?shù)亩〞r(shí)器事件,不能是別的定時(shí)器事件。比方說你想實(shí)現(xiàn)TIM1的寄存器與內(nèi)存間的DMA

BURST傳輸,觸發(fā)事件不能是來自TIM2、TIM3這些非TIM1的事件。

3、定時(shí)器DMA

Burst傳輸時(shí),用來被BURST訪問的定時(shí)器寄存器應(yīng)該是同一定時(shí)器的而且是地址連續(xù)的寄存器,不可跳躍訪問。比方說像下面某TIMER的4個(gè)比較寄存器物理地址是安排在一起的,而CH2恰好因?yàn)槟承┰驔]有被用上。

圖片

如果你僅對(duì)CH1/CH3/CH4三個(gè)通道的比較寄存器的值做BURST訪問,此時(shí)盡管CH2沒有被用上,BURST訪問的傳輸個(gè)數(shù)應(yīng)該是4而不是3。

4、STM32

HAL庫里的例程或函數(shù)重點(diǎn)在演示相應(yīng)的功能或特性,但它不能包羅萬象或保證適用于任何場景。有些時(shí)候我們可能需要在現(xiàn)有庫函數(shù)的前提下適當(dāng)?shù)刈鲂┱{(diào)整來滿足需求。

結(jié)合這幾點(diǎn),我們一起排查下。第1點(diǎn)、第2點(diǎn)已經(jīng)核對(duì)過了,沒問題??纯吹?點(diǎn),即設(shè)置BURST傳輸個(gè)數(shù)。下圖是F40x系列TIM2~TIM5的內(nèi)存地址映射圖。

圖片

現(xiàn)在使用者真正需要用到的寄存器只有TIM3-》ARR和TIM3-》CCR1兩個(gè)寄存器,但二者中間還有個(gè)預(yù)留空位【其它高級(jí)定時(shí)器的RCR寄存器的位置】也必須算進(jìn)來,即這里BURST傳輸個(gè)數(shù)應(yīng)該是3而不是2。

再看看上面提到的第4點(diǎn)要注意的地方。這點(diǎn)我就不過多解釋了,ST提供的HAL庫例程及相關(guān)函數(shù)只能實(shí)現(xiàn)1次BURST傳輸?shù)墓δ?,如果要?shí)現(xiàn)多次BURST傳輸就得在其代碼基礎(chǔ)上做些調(diào)整,更多細(xì)節(jié)可以參考我之前分享的那篇《STM32定時(shí)器BURST傳輸介紹及示例》。不過,在那篇的演示例程里我使用的是DMA

Circular模式,現(xiàn)在的用戶則要使用DMA

Normal模式。采用Normal模式和采用Circular模式基于現(xiàn)有HAL庫函數(shù)組織代碼還略有差異,若沒處理好這點(diǎn)小差異,可能讓你完全出不來想要的結(jié)果。

下面我使用STM32G4芯片的TIM3-CH1演示上面用戶的功能。每次輸出5個(gè)脈沖,3次輸出為一個(gè)循環(huán),同一循環(huán)中的3次輸出的頻率各不相同,占空比一樣?!緸槭裁礇]用STM32F401芯片,是因?yàn)榇藭r(shí)手上沒有帶該芯片的開發(fā)板。不過演示功能的配置及代碼基本一樣?!?/p>

我使用CubeMx對(duì)TIM3進(jìn)行配置,參考配置如下:

圖片

開啟TIM3基于更新事件的DMA傳輸功能并做相關(guān)配置。

圖片

配置完成,生成初始化工程,添加用戶代碼。

我準(zhǔn)備了3串脈沖的ARR/CCR1的值,分別以數(shù)組PulseData1[]、PulseData2[]、PulseData3[]來存放,占空比都設(shè)置為50%。顯然數(shù)組行中間的0值用于前面提到過的預(yù)留字,此處無實(shí)際作用。另外,每個(gè)數(shù)組中的第6行數(shù)據(jù)其實(shí)是關(guān)閉當(dāng)前通道PWM輸出,具體應(yīng)用時(shí)注意結(jié)合所選擇的PWM模式及極性選擇。

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

    關(guān)注

    2263

    文章

    10846

    瀏覽量

    353773
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1009

    瀏覽量

    122561
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    4.TIM1更新事件頻率 更新事件頻率由16khz改為10k/5k,或者重復(fù)計(jì)數(shù)由1改為2 結(jié)果反饋,TIM3計(jì)數(shù)數(shù)值重復(fù) 5.其他定時(shí)器計(jì)數(shù)值 DMA觸發(fā)方式為TIM1更新
    發(fā)表于 04-10 06:50

    TIMx“DMA Burst Feature”如何通過SPI觸發(fā)多個(gè)DMA請(qǐng)求?

    ,因?yàn)?SPI 外設(shè)最多支持 16 位傳輸。不過,我還沒有看到有人使用 Timer DMA-burst 功能。我想使用計(jì)時(shí)來觸發(fā) DMA/SPI
    發(fā)表于 02-07 08:23

    STM32F030的定時(shí)器PWM使用設(shè)置與ADC的dma代碼

    里面是STM32F030的定時(shí)器PWM使用設(shè)置與ADC的dma代碼
    發(fā)表于 03-21 15:29 ?152次下載

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

    有人使用STM32的定時(shí)器事件觸發(fā)DMA,讓其將內(nèi)存數(shù)據(jù)傳輸到通信外設(shè)的數(shù)據(jù)寄存進(jìn)行發(fā)送,發(fā)現(xiàn)DMA根本就不動(dòng)作。
    的頭像 發(fā)表于 11-25 09:21 ?2.1w次閱讀
    STM32<b class='flag-5'>定時(shí)器</b>觸發(fā)<b class='flag-5'>DMA</b>數(shù)據(jù)<b class='flag-5'>傳輸</b>失敗的原因如何解決

    STM32定時(shí)器BURST傳輸介紹及示例

    這里有兩個(gè)專門用于定時(shí)器BURST傳輸的寄存,分別是TIM2_DCR和TIM2_DMAR. 其中TIM2_DCR就是用來配置從哪個(gè)定時(shí)器
    的頭像 發(fā)表于 05-14 09:15 ?1.2w次閱讀
    STM32<b class='flag-5'>定時(shí)器</b><b class='flag-5'>BURST</b><b class='flag-5'>傳輸</b>介紹及示例

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

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

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

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

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

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

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

    STM32F103定時(shí)器觸發(fā)ADC+DMA傳輸ADC除了軟件觸發(fā)方式之外還有外部觸發(fā)模式,我用TIM2定時(shí)器觸發(fā)ADC,并用DMA
    發(fā)表于 11-30 10:36 ?53次下載
    STM32F103<b class='flag-5'>定時(shí)器</b>觸發(fā)ADC+<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>

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

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

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

    stm32g0 定時(shí)器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)stm32g0 定時(shí)器觸發(fā)ADC多通道采樣+DMA提取數(shù)據(jù)stm32g0 單片機(jī)對(duì)三相電流采樣,用
    發(fā)表于 12-16 16:56 ?68次下載
    stm32 <b class='flag-5'>定時(shí)器</b>觸發(fā)ADC多通道采樣+<b class='flag-5'>DMA</b>提取數(shù)據(jù)

    使用MM32F0270 定時(shí)器DMA方式輸出PWM

    使用MM32F0270 定時(shí)器DMA方式輸出PWM
    的頭像 發(fā)表于 10-17 14:47 ?774次閱讀
    使用MM32F0270 <b class='flag-5'>定時(shí)器</b><b class='flag-5'>DMA</b>方式輸出PWM

    運(yùn)用 DMA 功能實(shí)現(xiàn)高級(jí)定時(shí)器和 ADC 的同步觸發(fā)采樣

    運(yùn)用DMA功能實(shí)現(xiàn)高級(jí)定時(shí)器和ADC的同步觸發(fā)采樣在做BLDC電機(jī)控制時(shí),需要ADC的采樣時(shí)刻和定時(shí)器產(chǎn)生的PWM波形相配合,才能獲取準(zhǔn)確的采樣值,本文介紹了CW32F030系列芯片通
    發(fā)表于 06-06 13:35 ?31次下載

    定時(shí)器設(shè)計(jì)實(shí)現(xiàn)

    返回ITimer類型的共享指針。其中ITimer類中定義了start和stop方法,用于啟動(dòng)或停止當(dāng)前定時(shí)器。 TimerManager還有一個(gè)內(nèi)部類TimerMessageQueue用于實(shí)現(xiàn)
    的頭像 發(fā)表于 11-08 16:50 ?535次閱讀

    CW32使用DMA單通道、定時(shí)器觸發(fā)ADC實(shí)現(xiàn)了多路AD采集

    本測(cè)試樣例基于CW32F030C8T6MCU,使用DMA單通道、定時(shí)器觸發(fā)ADC實(shí)現(xiàn)了12路AD采集。
    的頭像 發(fā)表于 05-24 09:29 ?741次閱讀
    CW32使用<b class='flag-5'>DMA</b>單通道、<b class='flag-5'>定時(shí)器</b>觸發(fā)ADC<b class='flag-5'>實(shí)現(xiàn)</b>了多路AD采集