衡阳派盒市场营销有限公司

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

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

3天內不再提示

應用筆記 | 高精度定時器中single-shot計數模式不工作

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

關鍵字:高精度定時器,Single-shot 計數模式

目錄預覽

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

1. 問題提出

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

2.問題描述

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

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

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

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

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

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

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

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

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

查看該配置對應的寄存器說明:

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

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

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

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

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

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

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

圖4.“問題”工程產生的Timer B初始化代碼

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

圖5.Timer B初始化代碼中調用軟件觸發更新

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

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

3. 解決方法

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

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

4.小結

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

完整內容請點擊“閱讀原文”下載原文檔。

長按掃碼關注公眾號

更多資訊,盡在STM32

點擊“閱讀原文”,可下載原文檔


原文標題:應用筆記 | 高精度定時器中single-shot計數模式不工作

文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

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

    關注

    6043

    文章

    44621

    瀏覽量

    638616
  • STM32
    +關注

    關注

    2272

    文章

    10924

    瀏覽量

    357599

原文標題:應用筆記 | 高精度定時器中single-shot計數模式不工作

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ADS1298 single-shot模式數據未轉換是怎么回事?

    采用STM32和ADS1298開發12導心電測量儀。ADS1298配置為continuous模式已經工作正常,現在要改為single-shot模式。在
    發表于 12-23 07:41

    使用ads1219這款模數轉換,讀寫流程和使用single-shot模式和continuous的區別是什么?

    我最近在使用ads1219這款模數轉換,遇到一些問題,我是想通過FPGA來讀取ADS1219的兩路單端的模擬信號,在疑惑是讀寫流程和使用single-shot模式和continuous的區別
    發表于 12-10 06:12

    如何在MSP430?上實現內置振蕩高精度定時器

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

    定時器的基本組成和工作模式

    定時器是計算機或電子設備中常見的一個硬件或軟件組件,其主要功能是測量和控制時間的流逝。它在各種應用起著至關重要的作用,如操作系統調度、多媒體播放、網絡通信、工業自動化控制以及家電設備的定時功能等。
    的頭像 發表于 08-19 18:28 ?1620次閱讀

    定時器工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時計數功能。定時器工作方式通常由一組寄存
    的頭像 發表于 07-12 10:29 ?1127次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程定時器是一種非常常見的功能模塊,用于實現各種定時計數功能。定時器
    的頭像 發表于 07-12 10:25 ?1079次閱讀

    PLC定時器工作原理和應用

    至關重要的角色。定時器能夠實現對時間的精確控制,是控制系統實現延時、定時、周期控制等功能的關鍵元件之一。本文將詳細闡述PLC定時器
    的頭像 發表于 06-18 11:55 ?2867次閱讀

    芯海CS32F0XXTIMER外設模塊應用筆記

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

    芯海科技應用筆記:CS32F0XX TIMER外設模塊指導

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

    stm32的一個定時器可以同時計算兩個光柵編碼嗎?

    由于手上只有一個c8t6,想做平衡車,這樣的話兩個編碼要兩個定時器計數,然后我在stm32官方編碼器使用筆記里看到這句話:“當定時器配置
    發表于 05-07 06:40

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

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

    集成有看門狗定時器高精度電壓監控TPS3851數據表

    電子發燒友網站提供《集成有看門狗定時器高精度電壓監控TPS3851數據表.pdf》資料免費下載
    發表于 03-29 10:00 ?0次下載
    集成有看門狗<b class='flag-5'>定時器</b>的<b class='flag-5'>高精度</b>電壓監控<b class='flag-5'>器</b>TPS3851數據表

    stm32f10x高級定時器TIM1和通用定時器TIM2~TIM4如何同步作用?

    ) TIM_TimeBaseInitStructure4.TIM_RepetitionCounter = 0; //重復計數器(高級定時器才有) TIM_TimeBaseInit(TIM4
    發表于 03-19 06:26

    stm32主從定時器門控模式,怎么控制在產生PWM時從定時器cnt不要計數

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

    淺談時間間隔計數器定時器間隔測量功能

    與頻率計數器一樣,定時器計數器或間隔定時器也具有許多組成測試儀器的模塊。它們與計數器中使用的非常相似,只需要重新配置即可提供間隔
    的頭像 發表于 02-08 07:32 ?1946次閱讀
    跨国际百家乐官网的玩法技巧和规则| 百家乐怎么做弊| 百家乐官网的玩法技巧和规则| 利高在线娱乐城| 伊吾县| 固阳县| 百家乐官网游戏平台有哪些哪家的口碑最好 | 百家乐官网斗地主在哪玩| 百家乐官网太阳城菲律宾| 青鹏百家乐官网游戏币| 新河县| 百家乐官网的玩法和技巧| 现场百家乐官网平台源码| 百家乐官网赌场策略| G3百家乐官网的玩法技巧和规则 | 百家乐网上赌博网| 在线玩百家乐的玩法技巧和规则 | 联合百家乐官网的玩法技巧和规则 | 百家乐官网系列抢庄龙| 百威百家乐官网的玩法技巧和规则 | 万宝路百家乐的玩法技巧和规则 | 百家乐15人专用桌布| 网上的百家乐是假的吗| 威尼斯人娱乐城首存优惠| 德州扑克大师| 城步| 自贡百家乐官网赌场| 电子百家乐官网规则| 百家乐改单软件| 全讯网3344111| 定西市| 百家乐官网单机版游戏下载| 百家乐官网代理合作| 百家乐怎么才能| 青鹏棋牌游戏大厅v3.0| 博e百| 赌场百家乐官网是如何玩| 百家乐视频游戏平台| 百家乐赌场娱乐城大全| 棋牌小游戏| 成都市|