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

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

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

高精度定時器中single-shot計數(shù)模式不工作

jf_pJlTbmA9 ? 來源:STM32單片機(jī) ? 作者:STM32單片機(jī) ? 2023-10-25 18:08 ? 次閱讀

1. 問題提出

客戶使用STM32G474的高精度定時器,基于CubeMX進(jìn)行外設(shè)設(shè)置和代碼生成,將某個子定時器的計數(shù)方式設(shè)置為retriggerable single shot方式,發(fā)現(xiàn)該子定時器無PWM輸出,在調(diào)試模式下發(fā)現(xiàn)該子定時器的計數(shù)器一直為0,即計數(shù)器一直沒有啟動,但如果將計數(shù)方式修改為continuous模式,其他保持不變,定時器工作正常。

2.問題描述

檢查客戶提供的CubeMX配置文件,客戶使能了Master Timer與Timer B,Master Timer的比較器事件2觸發(fā)Timer B復(fù)位與運(yùn)行,并配置了Timer B的PWM輸出,使用該工程文件直接生成代碼,并添加高精度定時器計數(shù)使能與輸出使能函數(shù),如下:

wKgaomUDwPSAfXevAADy3h14Gdc305.png

進(jìn)入調(diào)試模式觀察,發(fā)現(xiàn)Master Timer正常計數(shù),但是Timer B的計數(shù)器一直保持0,按照客戶的描述,將Timer B的計數(shù)方式修改為“continous”后,Timer B恢復(fù)正常計數(shù)。對比Timer B在“retriggerable single shot”與“continous”兩種工作模式下的相關(guān)寄存器的值進(jìn)行對比,發(fā)現(xiàn)除了計數(shù)模式不同之外,其他所有狀態(tài)都相同。

莫非真是“retriggerable single shot”存在問題?這明顯不可能,此前多次使用過該模式并沒有發(fā)現(xiàn)問題,于是將以前設(shè)計的能成功工作的例程拿來與該“問題”工程進(jìn)行對比。經(jīng)過比對分析發(fā)現(xiàn),工程設(shè)置中使用的寄存器更新方式存在不同,如下圖所示:

wKgZomUDwPaAdfLBAADXsqRtjfc572.png

圖1.正常工作工程中的寄存器更新配置

wKgaomUDwPeAPmoYAAEPAjO75zA705.png

圖2.“問題”工作工程中的寄存器更新配置

“問題”工程配置中使用Master Timer的更新作為觸發(fā)寄存器更新觸發(fā)源,并且更新要等到本定時器的下一次的Reset/Roll-over事件出現(xiàn)時才生效。通過將“Update taken into account on the following Reset/Roll-over event”修改為“Update taken into account immediately”,定時器也可以正常運(yùn)行了,問題的原因就是由于該配置引起的。

查看該配置對應(yīng)的寄存器說明:

wKgZomUDwPmAVgSrAAKSD43MP4s859.png

當(dāng)配置“Update taken into account on the following Reset/Roll-over event”對應(yīng)于該位置“1”,即更新事件,無論是來自相鄰定時器的還是軟件產(chǎn)生的,都需要等到下一個Reset/Roll-over event才生效。

在直接使用CubeMX產(chǎn)生的HAL底層配置代碼且配置中使能了預(yù)加載的情況下,該寄存器更新配置方式會導(dǎo)致Timer B的初始化配置無法生效。

如圖3/4/5所顯示的,因為在CubeMX直接生成的代碼中,Timer B參數(shù)的配置通過調(diào)用函數(shù)HAL_HRTIM_WaveformTimerConfig()寫入寄存器,然后在該函數(shù)中調(diào)用軟件更新函數(shù)HRTIM_ForceRegistersUpdate()的方式讓配置生效,那么在目前的配置下,軟件觸發(fā)更新也必須等待Reset/Roll-over event的出現(xiàn)。而在retriggerable single shot計數(shù)模式下,定時器不能自動啟動計數(shù),必須等待來自Master Timer的Reset事件(即前文提到的比較器事件2)

wKgZomUDwPqAeTOpAAFwt9YUXU4915.png

圖3.“問題”工程中的寄存器更新與定時器Reset配置

wKgZomUDwPyASqjhAAQ6sxu-ZHQ446.png

圖4.“問題”工程產(chǎn)生的Timer B初始化代碼

wKgaomUDwP6ADetCAAY5AH_EYZM306.png

圖5.Timer B初始化代碼中調(diào)用軟件觸發(fā)更新

綜上,雖然正確地配置了Reset事件,Master Timer也正常計數(shù)且產(chǎn)生了比較事件2,但問題在于在運(yùn)行了初始化代碼后,該配置僅僅是寫到了preload寄存器中,而沒有寫入active寄存器中,即Timer B的復(fù)位源沒有生效,帶來的后果就是Timer B的計數(shù)器不運(yùn)行,一直保持0,且所有帶有預(yù)加載特性的寄存器的值也沒有生效。

作為對比,當(dāng)配置為“Update taken into account immediately”時,調(diào)用軟件觸發(fā)更新函數(shù)HRTIM_ForceRegistersUpdate()函數(shù),將使所有配置立即生效,定時器可正常工作。

3. 解決方法

基于以上分析,造成該問題的主要原因時CubeMX基于HAL庫自動生成的初始化代碼中沒有考慮不同的寄存器更新配置方式,只是單一的采用軟件更新的方式來觸發(fā)寄存器更新。要解決以上問題,需要修改代碼中的定時器初始化的時序,在配置寄存器更新方式為“Update taken into account on the following Reset/Roll-over event”前,讓其他的配置先生效,基本邏輯如下,該邏輯在客戶自己編寫初始化代碼時也需要遵循。

wKgZomUDwP-AG__qAAFYaQiauQE750.png

4.小結(jié)

解決客戶提出的高精度定時器中的子定時器在retriggerable single shot計數(shù)模式下無法工作的問題,原因在于該計數(shù)模式下,當(dāng)更新配置方式為“Update taken into account on the following Reset/Roll-over event”時,使用CubeMX生成的原始初始化代碼出現(xiàn)了定時器配置無法生效,從而導(dǎo)致問題的出現(xiàn)。通過對初始化代碼的邏輯進(jìn)行簡單修改,問題得以解決。當(dāng)然,STM32CubeMX的未來版本應(yīng)會就這個地方做針對性地完善。

來源:STM32單片機(jī)

免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

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

    關(guān)注

    31

    文章

    5274

    瀏覽量

    119668
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3228

    瀏覽量

    114184
  • CubeMx
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    1294
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)

     每來一個脈沖計數(shù)器加1,當(dāng)加到計數(shù)器為全1(即FFFFH)時,再輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使TCONTF0或TF1置1,
    發(fā)表于 06-17 09:57 ?8000次閱讀
    單片機(jī)<b class='flag-5'>定時器</b>/<b class='flag-5'>計數(shù)器</b>的結(jié)構(gòu)

    GPT高精度延時定時器簡介

    Linux NXP (I.MX6ULL) GPT高精度延時定時器0、GPT 定時器簡介1、GPT 定時器特性如下:2、GPT 定時器的可選時
    發(fā)表于 01-12 06:46

    求助,定時器控制連續(xù)計數(shù)模式如何運(yùn)作?

    連續(xù)計數(shù)模式計數(shù)器會不斷由0累加至224-1再回到0重新開始計數(shù),當(dāng)每次24位向上計數(shù)器數(shù)值與定時器比較緩存
    發(fā)表于 06-27 07:25

    定時器/計數(shù)器基礎(chǔ)

    15-1.實現(xiàn)定時的方法15-2.定時器/計數(shù)器的結(jié)構(gòu)和工作原理 15-3.定時器/計數(shù)器的控制
    發(fā)表于 03-23 12:17 ?48次下載

    高精度定時器電路及制作

    高精度定時器電路及制作
    發(fā)表于 04-14 11:39 ?14次下載
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>電路及制作

    HT48 MCU定時器/計數(shù)器的應(yīng)用

    HT48 MCU定時器/計數(shù)器的應(yīng)用 本文以 HT48R10A-1 為例,分別介紹HT48RXA-1 系列定時器/計數(shù)器的內(nèi)部計時
    發(fā)表于 03-25 09:53 ?24次下載

    HT48 MCU 定時器/計數(shù)器的使用

    HT48 MCU 定時器/計數(shù)器的使用簡介:本文以 HT48R10A-1 為例,分別介紹HT48RXA-1 系列定時器/計數(shù)器的內(nèi)部計時
    發(fā)表于 03-26 08:36 ?18次下載

    長時間高精度定時器

    長時間高精度定時器:某些場合需要長時間高精度定時器,此圖定時電路定時時間較長,
    發(fā)表于 12-14 08:05 ?1064次閱讀
    長時間<b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>

    51單片機(jī)——定時器計數(shù)器

    定時/計數(shù)選擇位):C/T=0——定時模式C/T=1——計數(shù)模式3.M0M1(工作方式選擇位)
    發(fā)表于 11-22 16:36 ?8次下載
    51單片機(jī)——<b class='flag-5'>定時器</b>和<b class='flag-5'>計數(shù)器</b>

    STM32定時器三種中心對齊計數(shù)模式簡介

    STM32的通用定時器和高級定時器除了支持單向的向上或向下計數(shù)模式外,還支持中心對齊計數(shù)模式,即一個計數(shù)周期內(nèi)分別由向上
    發(fā)表于 12-08 20:51 ?31次下載
    STM32<b class='flag-5'>定時器</b>三種中心對齊<b class='flag-5'>計數(shù)模式</b>簡介

    STM32F103-定時器

    )基本定時器只具有16位計數(shù)器功能,并且只能向上計數(shù)。通用定時器計數(shù)器輸入捕獲輸出比較生成pwm計數(shù)器
    發(fā)表于 12-31 19:14 ?14次下載
    STM32F103-<b class='flag-5'>定時器</b>

    工程師筆記|高精度定時器的同步功能

    了多個定時器,多個定時器之間可以單獨(dú)工作,也可以進(jìn)行同步,且高精度定時器還能與片上的其他定時器
    的頭像 發(fā)表于 11-22 18:15 ?1450次閱讀

    應(yīng)用筆記 | 高精度定時器single-shot計數(shù)模式工作

    關(guān)鍵字:高精度定時器,Single-shot 計數(shù)模式 目錄預(yù)覽 1 問題提出? 2 問題分析 3 解決辦法 4 小結(jié) 1. 問題提出 客戶使用STM32G474的
    的頭像 發(fā)表于 08-09 17:45 ?669次閱讀
    應(yīng)用筆記 | <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b><b class='flag-5'>中</b><b class='flag-5'>single-shot</b><b class='flag-5'>計數(shù)模式</b><b class='flag-5'>不</b><b class='flag-5'>工作</b>

    高精度定時器的同步功能

    電子發(fā)燒友網(wǎng)站提供《高精度定時器的同步功能.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 14:17 ?0次下載
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>的同步功能

    簡述STM32定時器計數(shù)器模式

    STM32的向上計數(shù)模式是指定時器計數(shù)器從0開始計數(shù),直到達(dá)到自動加載值(TIMx_ARR),然后重新從0開始計數(shù),并產(chǎn)生一個
    的頭像 發(fā)表于 12-13 10:09 ?4511次閱讀