99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

STM32G4系列芯片定時(shí)器的延時(shí)輸出問(wèn)題

茶話MCU ? 來(lái)源:茶話MCU ? 2024-07-01 09:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有人使用STM32G4系列芯片內(nèi)部的多個(gè)定時(shí)器做PWM輸出,輸出頻率一樣,占空比也一樣,均為50%??墒牵?dāng)他中途調(diào)整各個(gè)定時(shí)器以相同的工作參數(shù),即改變ARR的值和CCR值后,會(huì)發(fā)現(xiàn)TIM2和TIM5兩個(gè)定時(shí)器要比其它定時(shí)器延時(shí)等待一段長(zhǎng)達(dá)20s左右的時(shí)間后才恢復(fù)正常PWM輸出,覺(jué)得頗為奇怪。

該用戶將芯片系統(tǒng)時(shí)鐘配置成170MHz,并作為各個(gè)片內(nèi)定時(shí)器的時(shí)鐘源,不做分頻后作為各個(gè)計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘。

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

起初各個(gè)定時(shí)器的參數(shù)配置如下圖左邊所示內(nèi)容,工作起來(lái)后,于某時(shí)刻將各個(gè)定時(shí)器的工作參數(shù)改成下圖右邊所示內(nèi)容。

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

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

我們這里針對(duì)他用到的8個(gè)定時(shí)器來(lái)整理一下。8個(gè)定時(shí)器中除了TIM2/TIM5是32位定時(shí)器外,其它都是16位定時(shí)器。時(shí)鐘源、時(shí)基參數(shù)、PWM輸出配置都一樣。另外,他還強(qiáng)調(diào)關(guān)閉了各定時(shí)器的ARR和CCR的預(yù)裝功能,就是說(shuō)針對(duì)這兩個(gè)寄存器即改即生效。

現(xiàn)在看來(lái),感覺(jué)問(wèn)題跟定時(shí)器的位寬有關(guān)。在STM32G4系列芯片里,TIM3是16位TIMER,TIM2是32位TIMER。這里不妨就拿它兩個(gè)作為代表做下測(cè)試,模擬該用戶的使用場(chǎng)景,看看是否可以重現(xiàn)問(wèn)題現(xiàn)象。剛開(kāi)始,兩個(gè)定時(shí)器使用完全相同的參數(shù)配置?!疽?jiàn)下圖】

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

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

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

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

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

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

為什么會(huì)這樣呢?

我們進(jìn)一步理一下當(dāng)前定時(shí)器的配置情況。現(xiàn)在兩個(gè)TIMER除了計(jì)數(shù)器位寬不一樣外,其它的具體配置都是完全一樣的。時(shí)基參數(shù)一樣,向上計(jì)數(shù)模式,PWM1模式,極性選擇為高有效。做PWM輸出時(shí)OC端遵循當(dāng)CCR大于CNT時(shí)輸出高,否則輸出低電平。顯然,兩個(gè)定時(shí)器輸出通道的輸出規(guī)則也是一樣的。

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

那問(wèn)題到底出在哪里呢?

有個(gè)問(wèn)題我們可能忽略了,那就是我們修改定時(shí)器工作參數(shù)【這里就是時(shí)基參數(shù)和CCR值】的時(shí)間點(diǎn)。假設(shè)現(xiàn)有某定時(shí)器處于向上計(jì)數(shù)模式、自動(dòng)重裝值被設(shè)定為ARR_1值后開(kāi)始計(jì)數(shù)工作,然后在如下圖所示某時(shí)刻修改ARR值成ARR_2并立即生效。

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

當(dāng)計(jì)數(shù)器計(jì)到CNT_x位置時(shí)成功修改了ARR的值變?yōu)锳RR_2,此時(shí)計(jì)數(shù)器繼續(xù)向上計(jì)到ARR2后發(fā)生溢出后,重裝0開(kāi)始新的計(jì)數(shù)循環(huán)。 但是,如果新的且生效的ARR值A(chǔ)RR_2比當(dāng)前計(jì)數(shù)器值【CNT_x】還小會(huì)怎么樣呢?即像下面圖示的樣子:

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

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

計(jì)數(shù)器會(huì)依然按照現(xiàn)有計(jì)數(shù)方向計(jì)數(shù):

對(duì)于16位寬度的定時(shí)器,它會(huì)從CNT_x一直計(jì)到0xffff時(shí)發(fā)生溢出,再?gòu)?開(kāi)始計(jì)數(shù),計(jì)到ARR_2后發(fā)生溢出重裝,這樣周期性地循環(huán)計(jì)數(shù)。顯然,如果定時(shí)器還做PWM輸出的話,從CNT_x到0xffff這段時(shí)間的輸出不是正常的,或者說(shuō)不是預(yù)期的。

對(duì)于32位寬度的定時(shí)器,它會(huì)從CNT_x一直計(jì)到0xffffffff時(shí)才發(fā)生溢出,再?gòu)?開(kāi)始計(jì)數(shù),計(jì)到ARR_2后發(fā)生溢出重裝,這樣周期性地循環(huán)計(jì)數(shù)。同樣,如果定時(shí)器還做PWM輸出的話,從CNT_x到0xffffffff這段時(shí)間的輸出也不是正常的,或者說(shuō)不是預(yù)期的。

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

好,拉回我們前面的模擬測(cè)試。在測(cè)試中發(fā)生TIM2長(zhǎng)時(shí)間暫停PWM輸出后才恢復(fù)的情形時(shí),我們可以借助調(diào)試工具,發(fā)現(xiàn)成功修改ARR值時(shí)的CNT值要比新的ARR值【11332】大,見(jiàn)下面代碼截圖【圖中數(shù)據(jù)是16機(jī)制】:

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

此時(shí),不論TIM2還是TIM3都要繼續(xù)往上計(jì)數(shù)到各自計(jì)數(shù)寬度所對(duì)應(yīng)的默認(rèn)計(jì)數(shù)最大值才基于新的ARR值做循環(huán)計(jì)數(shù)。在這段繼續(xù)往上計(jì)數(shù)的時(shí)間段內(nèi),因?yàn)樾碌腃CR值也已經(jīng)生效且總是小于CNT的值,結(jié)合PWM1模式和高有效的極性選擇配置,這段時(shí)間自然持續(xù)保持低電平輸出。

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

前面也說(shuō)了,是否會(huì)出現(xiàn)一段不受控或說(shuō)非預(yù)期的較長(zhǎng)計(jì)數(shù)段跟我們修改TIMER工作參數(shù)的時(shí)間點(diǎn)有關(guān)系。當(dāng)修改工作參數(shù)時(shí)間點(diǎn)符合前面分析的第一種情形,即新的ARR值大于當(dāng)前計(jì)數(shù)器值時(shí),是不會(huì)出現(xiàn)那段不受控或說(shuō)非預(yù)期的較長(zhǎng)延時(shí)的。比如我在測(cè)試代碼中,調(diào)整修改時(shí)間點(diǎn)如下面情形時(shí),就看不到TIM2需要長(zhǎng)時(shí)間延時(shí)后才輸出PWM的情況。

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

從上圖中不難看出,成功修改完新的ARR值后,當(dāng)前計(jì)數(shù)器的值比新的ARR值小。這時(shí)計(jì)數(shù)器只需按照原計(jì)數(shù)方向計(jì)到新的ARR值后溢出重裝,開(kāi)始循環(huán)計(jì)數(shù)。此時(shí)也感覺(jué)不到PWM輸出的明顯異常,更看不到長(zhǎng)時(shí)間無(wú)PWM輸出的情形。

上面的問(wèn)題也分析得差不多了,如何避免問(wèn)題的產(chǎn)生呢?

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

下面代碼截圖示意隨機(jī)修改ARR及CCR【此時(shí)關(guān)閉了二者的預(yù)裝功能】的情況,每次修改后都讓計(jì)數(shù)器從0開(kāi)始計(jì)數(shù),就完全可以避免可能出現(xiàn)長(zhǎng)時(shí)間無(wú)PWM輸出的情況。

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

上面的分析都是基于計(jì)數(shù)器采用向上計(jì)數(shù)模式而言的,如果換了計(jì)數(shù)模式,有些描述可能需相應(yīng)做調(diào)整,但基本意思是一樣的。

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

    關(guān)注

    459

    文章

    52502

    瀏覽量

    440732
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5511

    瀏覽量

    219371
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2291

    瀏覽量

    96403
  • 定時(shí)器

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118898

原文標(biāo)題:一段莫名的延時(shí)輸出問(wèn)題

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32G4的應(yīng)用

    STM32G4系列發(fā)布也有一段時(shí)間了,但是網(wǎng)上關(guān)于G4的開(kāi)發(fā)板一直很少,所以一直想體驗(yàn)一下G4的MCU,在我畫(huà)板的時(shí)候,我已經(jīng)體驗(yàn)到了G4
    發(fā)表于 08-06 07:42

    STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量

    摘要本文章基于國(guó)信長(zhǎng)天M4開(kāi)發(fā)板,講述了STM32G4 定時(shí)器TIM輸入捕獲頻率測(cè)量的因通過(guò)用,祝各位學(xué)生藍(lán)橋杯比賽取得好成績(jī)!M4開(kāi)發(fā)板 頻率發(fā)生
    發(fā)表于 08-16 06:35

    請(qǐng)問(wèn)一下STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量的應(yīng)用?

    請(qǐng)問(wèn)一下STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量的應(yīng)用?
    發(fā)表于 11-18 07:01

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

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

    基于STM32定時(shí)器實(shí)現(xiàn)毫秒延時(shí)函數(shù)

    STM32定時(shí)器包含基本定時(shí)器、通用定時(shí)器和高級(jí)定時(shí)器,其中TIM6和TIM7是STM32當(dāng)中的
    發(fā)表于 10-12 15:54 ?2.6w次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>實(shí)現(xiàn)毫秒<b class='flag-5'>延時(shí)</b>函數(shù)

    利用STM32F4系列基本定時(shí)器寫(xiě)延時(shí)程序

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

    基于STM32G4芯片的DAC應(yīng)用示例分享

    。這里要演示的基本功能就是讓DAM將內(nèi)存數(shù)據(jù)周期性傳輸給DAC數(shù)據(jù)寄存,最后輸出一路正弦波。 結(jié)合STM32G4芯片的特性,這里可以有兩種實(shí)現(xiàn)方式。 第一種,DMA的請(qǐng)求來(lái)自于DAC
    的頭像 發(fā)表于 11-26 11:39 ?5436次閱讀
    基于<b class='flag-5'>STM32G4</b><b class='flag-5'>芯片</b>的DAC應(yīng)用示例分享

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

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

    STM32定時(shí)器US延時(shí)

    定時(shí)器”介紹的SysTick定時(shí)器,該定時(shí)器位于Cortex-M3內(nèi)核中。外設(shè)定時(shí)器芯片半導(dǎo)體廠商設(shè)計(jì),如
    發(fā)表于 12-05 15:36 ?25次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>US<b class='flag-5'>延時(shí)</b>

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

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

    STM32G4 系列壽命估算

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

    AN5306_OPAMP在STM32G4系列中的應(yīng)用

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

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

    AN5310_使用STM32F3系列STM32G4系列設(shè)備的模擬特性指南
    發(fā)表于 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>設(shè)備的模擬特性指南

    STM32G4系列安全手冊(cè)

    STM32G4系列安全手冊(cè)
    發(fā)表于 11-22 08:21 ?4次下載
    <b class='flag-5'>STM32G4</b><b class='flag-5'>系列</b>安全手冊(cè)

    STM32如何使用定時(shí)器實(shí)現(xiàn)微秒(us)級(jí)延時(shí)?

    STM32如何使用定時(shí)器實(shí)現(xiàn)微秒(us)級(jí)延時(shí)? 在STM32微控制中,可以使用定時(shí)器實(shí)現(xiàn)微秒
    的頭像 發(fā)表于 11-06 11:05 ?7699次閱讀