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

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

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

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

STM32單片機(jī) ? 來源:未知 ? 2023-08-09 17:45 ? 次閱讀

關(guān)鍵字:高精度定時(shí)器,Single-shot 計(jì)數(shù)模式

目錄預(yù)覽

1 問題提出2 問題分析3 解決辦法4 小結(jié)

1. 問題提出

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

2.問題描述

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

1229c950-3698-11ee-9e74-dac502259ad0.png

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

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

12695f84-3698-11ee-9e74-dac502259ad0.png

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

1288dc42-3698-11ee-9e74-dac502259ad0.png

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

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

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

12a29146-3698-11ee-9e74-dac502259ad0.png

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

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

如圖3/4/5所顯示的,因?yàn)樵贑ubeMX直接生成的代碼中,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計(jì)數(shù)模式下,定時(shí)器不能自動啟動計(jì)數(shù),必須等待來自Master Timer的Reset事件(即前文提到的比較器事件2)

12e47e9e-3698-11ee-9e74-dac502259ad0.png

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

13021486-3698-11ee-9e74-dac502259ad0.png

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

13267a6a-3698-11ee-9e74-dac502259ad0.png

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

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

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

3. 解決方法

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

13632a64-3698-11ee-9e74-dac502259ad0.png

4.小結(jié)

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

完整內(nèi)容請點(diǎn)擊“閱讀原文”下載原文檔。

長按掃碼關(guān)注公眾號

更多資訊,盡在STM32

點(diǎn)擊“閱讀原文”,可下載原文檔


原文標(biāo)題:應(yīng)用筆記 | 高精度定時(shí)器中single-shot計(jì)數(shù)模式不工作

文章出處:【微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    6026

    文章

    44458

    瀏覽量

    631107
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10849

    瀏覽量

    353851

原文標(biāo)題:應(yīng)用筆記 | 高精度定時(shí)器中single-shot計(jì)數(shù)模式不工作

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在MSP430?上實(shí)現(xiàn)內(nèi)置振蕩高精度定時(shí)器

    電子發(fā)燒友網(wǎng)站提供《如何在MSP430?上實(shí)現(xiàn)內(nèi)置振蕩高精度定時(shí)器.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 11:10 ?0次下載
    如何在MSP430?上實(shí)現(xiàn)內(nèi)置振蕩<b class='flag-5'>器</b>的<b class='flag-5'>高精度</b><b class='flag-5'>定時(shí)器</b>

    定時(shí)器的基本組成和工作模式

    定時(shí)器是計(jì)算機(jī)或電子設(shè)備中常見的一個(gè)硬件或軟件組件,其主要功能是測量和控制時(shí)間的流逝。它在各種應(yīng)用起著至關(guān)重要的作用,如操作系統(tǒng)調(diào)度、多媒體播放、網(wǎng)絡(luò)通信、工業(yè)自動化控制以及家電設(shè)備的定時(shí)功能等。
    的頭像 發(fā)表于 08-19 18:28 ?737次閱讀

    定時(shí)器工作方式介紹

    定時(shí)器是計(jì)算機(jī)和嵌入式系統(tǒng)中常見的一種硬件模塊,用于實(shí)現(xiàn)定時(shí)計(jì)數(shù)功能。定時(shí)器工作方式通常由一組寄存
    的頭像 發(fā)表于 07-12 10:29 ?582次閱讀

    定時(shí)器相關(guān)的寄存有哪些類型

    在微控制編程,定時(shí)器是一種非常常見的功能模塊,用于實(shí)現(xiàn)各種定時(shí)計(jì)數(shù)功能。定時(shí)器
    的頭像 發(fā)表于 07-12 10:25 ?557次閱讀

    芯海CS32F0XXTIMER外設(shè)模塊應(yīng)用筆記

    本應(yīng)用筆記旨在展示使用CS32FOxx微控,針對定時(shí)器外設(shè)的應(yīng)用。幫助用戶了解CS32FOxx定時(shí)器的基本特性、操作模式及相關(guān)應(yīng)用的示例代
    發(fā)表于 05-16 15:02

    芯??萍紤?yīng)用筆記:CS32F0XX TIMER外設(shè)模塊指導(dǎo)

    本應(yīng)用筆記旨在展示使用 CS32F0xx 微控,針對定時(shí)器外設(shè)的應(yīng)用。幫助用戶了解 CS32F0xx 定時(shí)器的基本特性、操作模式及相關(guān)應(yīng)用
    發(fā)表于 05-16 10:52

    定時(shí)器在STEP 7V5.x及STEP 7(TIA Portal)的不同處理步驟

    基于STEP 5的兼容性,仍然可以使用STEP7 S5定時(shí)器計(jì)數(shù)器,定時(shí)器計(jì)數(shù)器是全局的且基于編號尋址,當(dāng)啟動定時(shí)器/
    的頭像 發(fā)表于 04-07 11:35 ?1485次閱讀
    <b class='flag-5'>定時(shí)器</b>在STEP 7V5.x及STEP 7(TIA Portal)的不同處理步驟

    stm32主從定時(shí)器門控模式,怎么控制在產(chǎn)生PWM時(shí)從定時(shí)器cnt不要計(jì)數(shù)?

    stm32主從定時(shí)器,采用門控模式,主定時(shí)器用單脈沖模式控制輸出。但是我在實(shí)驗(yàn)的時(shí)候發(fā)現(xiàn)其從定時(shí)器cnt在主
    發(fā)表于 03-12 07:08

    8031單片機(jī)的定時(shí)器計(jì)數(shù)器是怎么工作

    8031單片機(jī)的定時(shí)器計(jì)數(shù)器是通過內(nèi)部的時(shí)鐘源來工作的。具體來說,定時(shí)器/計(jì)數(shù)器T0和T1的輸入端都接到了機(jī)器周期信號上,因此它們的
    發(fā)表于 02-02 17:13 ?1014次閱讀

    555定時(shí)器的基本功能 555定時(shí)器工作原理及其應(yīng)用

    定時(shí)器有三種基本工作模式,分別是單穩(wěn)態(tài)、自由運(yùn)放和雙穩(wěn)態(tài)。它可以在多種電子電路實(shí)現(xiàn)功能的實(shí)現(xiàn)。下面將詳細(xì)介紹它們的功能特點(diǎn)。 單穩(wěn)態(tài)模式
    的頭像 發(fā)表于 01-18 11:12 ?1.3w次閱讀

    AT32 定時(shí)器配置pr和div的作用

    AT32定時(shí)器是51系列單片機(jī)的一種定時(shí)器,可以實(shí)現(xiàn)多種定時(shí)功能。在AT32定時(shí)器,pr和d
    的頭像 發(fā)表于 01-08 10:12 ?1115次閱讀

    51單片機(jī)定時(shí)器定時(shí)1秒程序流水燈結(jié)果分析

    流水燈的設(shè)計(jì)原理、實(shí)現(xiàn)步驟和結(jié)果分析。 一、設(shè)計(jì)原理 在51單片機(jī),定時(shí)器常用的工作方式有兩種:定時(shí)器模式
    的頭像 發(fā)表于 12-26 14:57 ?5869次閱讀

    定時(shí)器會阻塞線程嗎 定時(shí)器指令有哪幾種

    指令: 一、硬件定時(shí)器指令: 1. 初始化定時(shí)器:用于配置和初始化定時(shí)器的各個(gè)參數(shù)和寄存。可以設(shè)置定時(shí)器的時(shí)鐘源、時(shí)鐘分頻比、
    的頭像 發(fā)表于 12-19 14:03 ?839次閱讀

    STM32的向上計(jì)數(shù)模式如何產(chǎn)生計(jì)數(shù)器溢出事件?

    STM32的向上計(jì)數(shù)模式的自動加載值是指定時(shí)器計(jì)數(shù)器的最大計(jì)數(shù)值。當(dāng)計(jì)數(shù)器達(dá)到這個(gè)值時(shí),它會回滾到0并繼續(xù)
    的頭像 發(fā)表于 12-13 10:22 ?1225次閱讀

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

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