色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

定時器DMA Burst傳輸無法實現

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

有人使用STM32F4系列開發產品,程序運行過程中需要不時地對外輸出一串驅動脈沖,并要求這幾串脈沖的頻率可變、占空比固定。他想到使用基于STM32定時器DMA

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

他目前使用的芯片是STM32F401,雖有點老舊,但我查看了手冊,確認該芯片的TIM3是支持基于TIMER事件實現TIME寄存器與內存間的DMABURST傳輸的。即每個TIMER事件可以申請多個DMA請求從而實現定時器寄存器與內存間的批量數據傳輸。要知某個STM32
TIMER是否支持上述功能,只需查看STM32參考手冊的相關定時器的寄存器中有無TIMx_DCR和TIMx_DMAR寄存器的介紹。

圖片

既然支持,為什么實現不了呢?關于這個功能我們還需要注意幾點:

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

2、觸發事件必須是來自參與DMA傳輸的定時器事件,不能是別的定時器事件。比方說你想實現TIM1的寄存器與內存間的DMA

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

3、定時器DMA

Burst傳輸時,用來被BURST訪問的定時器寄存器應該是同一定時器的而且是地址連續的寄存器,不可跳躍訪問。比方說像下面某TIMER的4個比較寄存器物理地址是安排在一起的,而CH2恰好因為某些原因沒有被用上。

圖片

如果你僅對CH1/CH3/CH4三個通道的比較寄存器的值做BURST訪問,此時盡管CH2沒有被用上,BURST訪問的傳輸個數應該是4而不是3。

4、STM32

HAL庫里的例程或函數重點在演示相應的功能或特性,但它不能包羅萬象或保證適用于任何場景。有些時候我們可能需要在現有庫函數的前提下適當地做些調整來滿足需求。

結合這幾點,我們一起排查下。第1點、第2點已經核對過了,沒問題。看看第3點,即設置BURST傳輸個數。下圖是F40x系列TIM2~TIM5的內存地址映射圖。

圖片

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

再看看上面提到的第4點要注意的地方。這點我就不過多解釋了,ST提供的HAL庫例程及相關函數只能實現1次BURST傳輸的功能,如果要實現多次BURST傳輸就得在其代碼基礎上做些調整,更多細節可以參考我之前分享的那篇《STM32定時器BURST傳輸介紹及示例》。不過,在那篇的演示例程里我使用的是DMA

Circular模式,現在的用戶則要使用DMA

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

下面我使用STM32G4芯片的TIM3-CH1演示上面用戶的功能。每次輸出5個脈沖,3次輸出為一個循環,同一循環中的3次輸出的頻率各不相同,占空比一樣。【為什么沒用STM32F401芯片,是因為此時手上沒有帶該芯片的開發板。不過演示功能的配置及代碼基本一樣。】

我使用CubeMx對TIM3進行配置,參考配置如下:

圖片

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

圖片

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

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

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

    關注

    2271

    文章

    10923

    瀏覽量

    357196
  • 控制
    +關注

    關注

    4

    文章

    1014

    瀏覽量

    122733
收藏 人收藏

    評論

    相關推薦

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

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

    TIMx“DMA Burst Feature”如何通過SPI觸發多個DMA請求?

    ,因為 SPI 外設最多支持 16 位傳輸。不過,我還沒有看到有人使用 Timer DMA-burst 功能。我想使用計時來觸發 DMA/SPI
    發表于 02-07 08:23

    STM32F030的定時器PWM使用設置與ADC的dma代碼

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

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

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

    STM32定時器BURST傳輸介紹及示例

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

    測試代碼中使用DMA傳輸定時器觸發ADC

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

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

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

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

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

    STM32F103定時器觸發ADC+DMA傳輸

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

    H743定時器觸發ADC轉換DMA傳輸之應用

    學習安富萊的H743的定時器觸發ADC DMA傳輸源碼
    發表于 11-30 11:21 ?11次下載
    H743<b class='flag-5'>定時器</b>觸發ADC轉換<b class='flag-5'>DMA</b><b class='flag-5'>傳輸</b>之應用

    stm32 定時器觸發ADC多通道采樣+DMA提取數據

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

    使用MM32F0270 定時器DMA方式輸出PWM

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

    運用 DMA 功能實現高級定時器和 ADC 的同步觸發采樣

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

    定時器設計實現

    返回ITimer類型的共享指針。其中ITimer類中定義了start和stop方法,用于啟動或停止當前定時器。 TimerManager還有一個內部類TimerMessageQueue用于實現
    的頭像 發表于 11-08 16:50 ?653次閱讀

    CW32使用DMA單通道、定時器觸發ADC實現了多路AD采集

    本測試樣例基于CW32F030C8T6MCU,使用DMA單通道、定時器觸發ADC實現了12路AD采集。
    的頭像 發表于 05-24 09:29 ?889次閱讀
    CW32使用<b class='flag-5'>DMA</b>單通道、<b class='flag-5'>定時器</b>觸發ADC<b class='flag-5'>實現</b>了多路AD采集
    主站蜘蛛池模板: 国产乱码精品一区二区三区四川 | 亚洲一卡久久4卡5卡6卡7卡 | 琉璃美人煞在线观看 | 四虎国产精品永久一区高清 | 亚洲区偷拍自拍29P 亚洲区视频在线观看 | 99久久人妻无码精品系列性欧美 | 私人玩物在线观看 | 成人无码国产AV免费看 | 看看妇女的B免费看 | 国产区在线不卡视频观看 | 欧洲最大无人区免费高清完整版 | 久久99蜜桃精品麻豆 | 中文字幕a有搜索网站 | 久草热8精品视频在线观看 久草青青在线 | 久久国产精品麻豆AV影视 | 久久精品国产欧美日韩99热 | 寂寞夜晚免费观看视频 | 精品区2区3区4区产品乱码9 | 男女交性视频无遮挡全过程 | 伊人久久青青 | 高清国产激情视频在线观看 | 日韩影院久久 | 国产在线观看的 | 2021精品高清卡1卡2卡3麻豆 | 色尼玛亚洲综合 | 国产成人精品系列在线观看 | 无码日韩人妻精品久久蜜桃入口 | 国产51麻豆二区精品AV视频 | 蜜桃成熟时2在线观看完整版hd | 欧美性情video sexo视频 | 国产AV精品国语对白国产 | 男生在床上脱美女 胸 | 麻豆国产99在线中文 | 亚洲高清国产拍精品动图 | 日韩av无码在线直播 | 久久婷婷久久一区二区三区 | 538久久视频在线 | 热久久免费频精品99热 | 午夜伦理伦理片在线观 | 最近在线视频观看2018免费 | 男的插曲女的下面免费APP |