在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32G4系列芯片定時器的延時輸出問題

茶話MCU ? 來源:茶話MCU ? 2024-07-01 09:45 ? 次閱讀

有人使用STM32G4系列芯片內部的多個定時器做PWM輸出,輸出頻率一樣,占空比也一樣,均為50%??墒?,當他中途調整各個定時器以相同的工作參數,即改變ARR的值和CCR值后,會發現TIM2和TIM5兩個定時器要比其它定時器延時等待一段長達20s左右的時間后才恢復正常PWM輸出,覺得頗為奇怪。

該用戶將芯片系統時鐘配置成170MHz,并作為各個片內定時器的時鐘源,不做分頻后作為各個計數器的計數時鐘。

7f18bc9c-36a1-11ef-a4c8-92fbcf53809c.png

起初各個定時器的參數配置如下圖左邊所示內容,工作起來后,于某時刻將各個定時器的工作參數改成下圖右邊所示內容。

7f24e206-36a1-11ef-a4c8-92fbcf53809c.png

參數的修改基本在同一時刻完成,可是修改完各定時器的參數后,除了TIM2/TIM5的通道外,其它都能及時地基于新參數產生PWM輸出,TIM2/TIM5的輸出通道竟然會持續20s左右的低電平后才重新產生基于新參數的PWM輸出,怪異得很!

我們這里針對他用到的8個定時器來整理一下。8個定時器中除了TIM2/TIM5是32位定時器外,其它都是16位定時器。時鐘源、時基參數、PWM輸出配置都一樣。另外,他還強調關閉了各定時器的ARR和CCR的預裝功能,就是說針對這兩個寄存器即改即生效。

現在看來,感覺問題跟定時器的位寬有關。在STM32G4系列芯片里,TIM3是16位TIMER,TIM2是32位TIMER。這里不妨就拿它兩個作為代表做下測試,模擬該用戶的使用場景,看看是否可以重現問題現象。剛開始,兩個定時器使用完全相同的參數配置。【見下圖】

7f44abb8-36a1-11ef-a4c8-92fbcf53809c.png

我在代碼里隨機地修改兩個定時器以相同的參數,也依然保持跟用戶相同數據。測試發現,很容易遇到修改參數后,TIM2要延時20多秒后才恢復PWM輸出的情形。如下圖所示:

7f57063c-36a1-11ef-a4c8-92fbcf53809c.png

結合上圖示波器輸出截圖,不難看出,針對TIM2/TIM3修改相同工作參數后,TIM2相對TIM3要延遲一段20多秒的低電平后才恢復PWM輸出。見紅色長橢圓形所圈出的地方。

其實,如果眼尖細心的人也許發現修改參數后,TIM3也保持了一段低電平時間后才做正常PWM輸出,感覺TIM3的PWM輸出也并非即該即生效,只是延時相比TIM2短了不少而已。見下圖黃色箭頭所指位置。

7f761ef0-36a1-11ef-a4c8-92fbcf53809c.png

為什么會這樣呢?

我們進一步理一下當前定時器的配置情況?,F在兩個TIMER除了計數器位寬不一樣外,其它的具體配置都是完全一樣的。時基參數一樣,向上計數模式,PWM1模式,極性選擇為高有效。做PWM輸出時OC端遵循當CCR大于CNT時輸出高,否則輸出低電平。顯然,兩個定時器輸出通道的輸出規則也是一樣的。

7f91beda-36a1-11ef-a4c8-92fbcf53809c.png

那問題到底出在哪里呢?

有個問題我們可能忽略了,那就是我們修改定時器工作參數【這里就是時基參數和CCR值】的時間點。假設現有某定時器處于向上計數模式、自動重裝值被設定為ARR_1值后開始計數工作,然后在如下圖所示某時刻修改ARR值成ARR_2并立即生效。

7fa075ec-36a1-11ef-a4c8-92fbcf53809c.png

當計數器計到CNT_x位置時成功修改了ARR的值變為ARR_2,此時計數器繼續向上計到ARR2后發生溢出后,重裝0開始新的計數循環。 但是,如果新的且生效的ARR值ARR_2比當前計數器值【CNT_x】還小會怎么樣呢?即像下面圖示的樣子:

7fc16fd6-36a1-11ef-a4c8-92fbcf53809c.png

此時新的ARR值是ARR_2,不再是ARR_1??纱藭r的計數器的值CNT_x比新的ARR_2還大,計數器又是向上計數模式。此時計數器如何計數呢?

計數器會依然按照現有計數方向計數:

對于16位寬度的定時器,它會從CNT_x一直計到0xffff時發生溢出,再從0開始計數,計到ARR_2后發生溢出重裝,這樣周期性地循環計數。顯然,如果定時器還做PWM輸出的話,從CNT_x到0xffff這段時間的輸出不是正常的,或者說不是預期的。

對于32位寬度的定時器,它會從CNT_x一直計到0xffffffff時才發生溢出,再從0開始計數,計到ARR_2后發生溢出重裝,這樣周期性地循環計數。同樣,如果定時器還做PWM輸出的話,從CNT_x到0xffffffff這段時間的輸出也不是正常的,或者說不是預期的。

也就是說,如果針對工作中的定時器中途成功修改ARR,且修改情形符合上面提到的第二種情形時,就會出現一段并不屬于用戶控制或用戶期望的計數段。自然,這段時間內的PWM輸出往往也不是用戶預期想要的。這段時間的長短取決于計數器的位寬和計數時鐘頻率。這個現象不論16位還是32位TIMER都有可能出現,無非時間長短、現象是否明顯罷了。這也解釋了前面16位TIMER和32位TIMER在成功修改ARR后都可能出現一段不受控或說非預期的計數時間段。

好,拉回我們前面的模擬測試。在測試中發生TIM2長時間暫停PWM輸出后才恢復的情形時,我們可以借助調試工具,發現成功修改ARR值時的CNT值要比新的ARR值【11332】大,見下面代碼截圖【圖中數據是16機制】:

7ffc3a62-36a1-11ef-a4c8-92fbcf53809c.png

此時,不論TIM2還是TIM3都要繼續往上計數到各自計數寬度所對應的默認計數最大值才基于新的ARR值做循環計數。在這段繼續往上計數的時間段內,因為新的CCR值也已經生效且總是小于CNT的值,結合PWM1模式和高有效的極性選擇配置,這段時間自然持續保持低電平輸出。

80142a6e-36a1-11ef-a4c8-92fbcf53809c.png

前面也說了,是否會出現一段不受控或說非預期的較長計數段跟我們修改TIMER工作參數的時間點有關系。當修改工作參數時間點符合前面分析的第一種情形,即新的ARR值大于當前計數器值時,是不會出現那段不受控或說非預期的較長延時的。比如我在測試代碼中,調整修改時間點如下面情形時,就看不到TIM2需要長時間延時后才輸出PWM的情況。

8028813a-36a1-11ef-a4c8-92fbcf53809c.png

從上圖中不難看出,成功修改完新的ARR值后,當前計數器的值比新的ARR值小。這時計數器只需按照原計數方向計到新的ARR值后溢出重裝,開始循環計數。此時也感覺不到PWM輸出的明顯異常,更看不到長時間無PWM輸出的情形。

上面的問題也分析得差不多了,如何避免問題的產生呢?

我們可以開啟ARR寄存器的預裝功能,這樣就可以避免可能出現一段漫長的非預期的計數段。如果不希望開啟ARR寄存器的預裝功能,而希望隨時修改ARR生效,我們可以在修改定時器的工作參數后,通過手動方式對TIMER進行復位,即對TIMER事件發生寄存器的UG位置1,這樣除了產生定時器更新事件外,計數器會根據計數模式重裝新的計數初值,若是向下計數模式,重裝ARR后開始向下計數,其它模式則重裝0值后開始向上計數。當然,也可以在修改定時器的工作參數后,直接對CNT賦予0值。

下面代碼截圖示意隨機修改ARR及CCR【此時關閉了二者的預裝功能】的情況,每次修改后都讓計數器從0開始計數,就完全可以避免可能出現長時間無PWM輸出的情況。

80d5b6f2-36a1-11ef-a4c8-92fbcf53809c.png

上面的分析都是基于計數器采用向上計數模式而言的,如果換了計數模式,有些描述可能需相應做調整,但基本意思是一樣的。

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

    關注

    456

    文章

    51281

    瀏覽量

    427776
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5201

    瀏覽量

    214966
  • 計數器
    +關注

    關注

    32

    文章

    2276

    瀏覽量

    95052
  • 定時器
    +關注

    關注

    23

    文章

    3256

    瀏覽量

    115445

原文標題:一段莫名的延時輸出問題

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

收藏 人收藏

    評論

    相關推薦

    STM32G4的應用

    STM32G4系列發布也有一段時間了,但是網上關于G4的開發板一直很少,所以一直想體驗一下G4的MCU,在我畫板的時候,我已經體驗到了G4
    發表于 08-06 07:42

    STM32G4定時器TIM輸入捕獲頻率測量

    摘要本文章基于國信長天M4開發板,講述了STM32G4 定時器TIM輸入捕獲頻率測量的因通過用,祝各位學生藍橋杯比賽取得好成績!M4開發板 頻率發生
    發表于 08-16 06:35

    請問一下STM32G4定時器TIM輸入捕獲頻率測量的應用?

    請問一下STM32G4定時器TIM輸入捕獲頻率測量的應用?
    發表于 11-18 07:01

    stm32G4 H7系列的HRTIM高分辨率定時器可以做捕獲輸入嗎?

    stm32G4,H7系列的HRTIM高分辨率定時器可以做捕獲輸入嗎,如果可以輸入引腳在哪。想測量外部脈沖頻率600-800KHz,誤差盡量小(±10Hz) 有什么方案給推薦一下。謝謝??!
    發表于 08-05 06:41

    基于STM32定時器實現毫秒延時函數

    STM32定時器包含基本定時器、通用定時器和高級定時器,其中TIM6和TIM7是STM32當中的
    發表于 10-12 15:54 ?2.5w次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>實現毫秒<b class='flag-5'>延時</b>函數

    利用STM32F4系列基本定時器延時程序

    STM32F4系列基本定時器TIM6 TIM7前言必須了解定時器時鐘頻率影子寄存代碼設計參考前言在一些需要的情況下軟件
    發表于 11-24 19:21 ?35次下載
    利用<b class='flag-5'>STM32F4</b><b class='flag-5'>系列</b>基本<b class='flag-5'>定時器</b>寫<b class='flag-5'>延時</b>程序

    基于STM32G4芯片的DAC應用示例分享

    。這里要演示的基本功能就是讓DAM將內存數據周期性傳輸給DAC數據寄存,最后輸出一路正弦波。 結合STM32G4芯片的特性,這里可以有兩種實現方式。 第一種,DMA的請求來自于DAC
    的頭像 發表于 11-26 11:39 ?4879次閱讀
    基于<b class='flag-5'>STM32G4</b><b class='flag-5'>芯片</b>的DAC應用示例分享

    STM32F4: Systick滴答定時器-延時函數講解(五)

    CM3,CM4內核芯片,都有Systick定時器。Systick定時器常用來做延時,或者實時系統的心跳時鐘。這樣可以節省MCU資源,不用浪費
    發表于 12-01 15:21 ?15次下載
    <b class='flag-5'>STM32F4</b>: Systick滴答<b class='flag-5'>定時器</b>-<b class='flag-5'>延時</b>函數講解(五)

    STM32定時器US延時

    定時器”介紹的SysTick定時器,該定時器位于Cortex-M3內核中。外設定時器芯片半導體廠商設計,如
    發表于 12-05 15:36 ?25次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>US<b class='flag-5'>延時</b>

    STM32】SysTick滴答定時器(delay延時函數講解)

    Systick定時器,是一個簡單的定時器,對于CM3、CM4內核芯片,都有Systick定時器。Systick
    發表于 02-10 10:35 ?13次下載
    【<b class='flag-5'>STM32</b>】SysTick滴答<b class='flag-5'>定時器</b>(delay<b class='flag-5'>延時</b>函數講解)

    STM32G4 系列壽命估算

    STM32G4 系列壽命估算
    發表于 11-21 08:11 ?2次下載
    <b class='flag-5'>STM32G4</b> <b class='flag-5'>系列</b>壽命估算

    AN5306_OPAMP在STM32G4系列中的應用

    AN5306_OPAMP在STM32G4系列中的應用
    發表于 11-21 08:11 ?4次下載
    AN5306_OPAMP在<b class='flag-5'>STM32G4</b><b class='flag-5'>系列</b>中的應用

    AN5310_使用STM32F3系列STM32G4系列設備的模擬特性指南

    AN5310_使用STM32F3系列STM32G4系列設備的模擬特性指南
    發表于 11-21 17:06 ?2次下載
    AN5310_使用<b class='flag-5'>STM32</b>F3<b class='flag-5'>系列</b>與<b class='flag-5'>STM32G4</b><b class='flag-5'>系列</b>設備的模擬特性指南

    STM32G4系列安全手冊

    STM32G4系列安全手冊
    發表于 11-22 08:21 ?3次下載
    <b class='flag-5'>STM32G4</b><b class='flag-5'>系列</b>安全手冊

    STM32如何使用定時器實現微秒(us)級延時?

    STM32如何使用定時器實現微秒(us)級延時? 在STM32微控制中,可以使用定時器實現微秒
    的頭像 發表于 11-06 11:05 ?6607次閱讀
    主站蜘蛛池模板: 中文字幕成人乱码在线电影 | 色玖玖 | 午夜影院a| 男同小黄文 | 日本免费黄色大片 | 综合免费一区二区三区 | 曰曰摸天天摸人人看久久久 | 女上男下边吃奶边做视频成都 | 末满18以下勿进色禁网站 | 最新理论三级中文在线观看 | 三级在线免费观看 | 五月激情久久 | 国产一区中文字幕在线观看 | 乱人伦一区二区三区 | 一区二区三区视频在线观看 | 手机在线观看毛片 | 五月激情视频 | 亚洲综合成人网在线观看 | 狠狠轮 | 免费视频在线播放 | 男人的天堂久久精品激情 | 天天爽夜夜爽夜夜爽精品视频 | 伊人狼人综合 | 免费一级特黄3大片视频 | 奇米久草| 久久手机看片 | 午夜影院在线观看视频 | 色多多污网站在线观看 | 伊人久久网站 | 人人乳乳香蕉大免费 | 影院成人区精品一区二区婷婷丽春院影视 | 天天摸夜夜摸成人免费视频 | 成人欧美一区二区三区视频不卡 | 欧美一区二区三区不卡片 | 精品欧美小视频在线观看 | 日韩一级在线播放免费观看 | 一区二区免费在线观看 | 五月婷婷 六月丁香 | 午夜精品久久久久久99热 | 国产尤物在线视频 | 久久草在线免费 |