那曲檬骨新材料有限公司

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

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

3天內不再提示

STM32定時器所支持的三種計數模式及計數過程

茶話MCU ? 來源:未知 ? 作者:李倩 ? 2018-11-19 19:18 ? 次閱讀

STM32常規定時器主要包括基本定時器、通用定時器和高級定時器。不論哪一類定時器,都有個共同的計數定時單元,我們把它稱之為時基單元。

該單元主要由三部分組成:

分頻模塊、計數模塊、自動重裝載模塊?。

分頻模塊用來對外來的計數時鐘進行分頻,這里有個分頻計數器,通過它來實現對時鐘的分頻功能。與之對應的有個分頻器寄存器TIMx_PSC,用來配置和存放分頻比、分頻系數。

計數模塊用來對來自分頻器輸出的計數脈沖進行計數。相應的這里有個寄存器—計數器寄存器TIMx_CNT,為了把該計數器跟別的計數器區別開來,不妨稱它為核心計數器。

自動重裝載模塊用來配合計數器溢出,當計數器溢出時為之賦予初始計數值的功能單元。與之相應的有個自動重裝載寄存器TIMx_ARR.當自動重裝載寄存器TIMx_ARR修改生效后就可以自動地作為計數器的計數邊界或重裝值。

關于自動重裝及自動重裝載寄存器TIMx_ARR是個相對比較難理解的地方,尤其關于ARR寄存器數據的含義。我們在看STM32參考手冊時,很難一下子理解得很到位,往往需要結合上下文內容反復閱讀后去領會。關于計數器的溢出與重裝,在手冊里只有些零散且并不算清晰的介紹,這里盡力跟大家做些交流,以供參考。

當計數器溢出時,自動重裝載器為計數器重裝計數初始值。自動重裝寄存器【ARR】為計數器設置計數邊界或初始值,決定計數脈沖的多少或計時周期長短。比如:計數器向上計數時,計到多少發生溢出;向下計數時從多少開始往下計數。平常我們泛泛地說ARR寄存器為計數器提供計數邊界或重裝值,但它的具體含義及使用需要結合計數器的計數模式才能確定。

那一起看看STM32定時器所支持的三種計數模式及計數過程。

【文中圖片可以點擊放大觀看】

從上面三種計數模式下的計數動作來看,不同模式下計數器的溢出點并不一樣,溢出后重裝值也不一樣。顯然,ARR寄存器里的數據扮演的角色也因不同的計數模式而有所不同。我這里特地就三種計數模式下的溢出與重裝匯總成一個表格,以便觀察和比較。不難看出,重裝值并不一定等于ARR,有時重裝值就是0.

根據上面的介紹和分析,我們要弄清楚幾點:

1、對時鐘脈沖進行計數以及溢出是計數器的事;

2、當計數器發生溢出時對計數器重裝初始值是自動重裝載器的事;

3、ARR寄存器里數據的含義會因計數模式的不同而有所不同;

我們弄個實例來看看,以加深對這個溢出與重裝的理解。

我們來看一個通過高級定時器使用比較輸出功能輸出指定個數脈沖的實例。假設使用PWM輸出的單脈沖模式,借助高級定時器的RCR【重復計數器寄存器】來輸出指定個數的PWM脈沖。

單脈沖模式:計數器啟動后,對于高級定時器,發生第RCR+1次溢出時觸發更新事件,同時計數器停止計數。對于通用定時器,沒有RCR寄存器,即每次溢出都可以產生更新事件,然后停止計數。

首先,我們需選擇合適的計數模式與PWM輸出模式來完成該任務。

條件1:向上計數模式 + PWM1模式;RCR=2; 極性選擇高有效。

基于這個條件,當CCR大于計數器CNT時,OCx端輸出高電平,反之輸出低電平。

RCR=2,意味著計數器在發生第3次溢出時產生更新事件。

經驗證測試,基于上面條件的輸出波形是下面的樣子。

【圖一、向上計數模式+ PWM1模式RCR=2;極性選擇高有效】

一眼就可以看出,輸出波形后面多了高電平尾巴,如果是自己期望的倒還好。如果希望最后電平停在低電平,顯然就不合適了。

我們先不管合不合適,看看為什么會這樣。最后發生溢出時計數器的值不等于ARR嗎?結合上面圖形,不難看出ARR的值顯然比CCR要大得多,即最后時刻計數器的值比CCR要大,那根據上面PWM1模式和極性選擇條件,不是該輸出低電平嗎?怎么會輸出高電平呢?奇怪!哪里不對勁呢?

那我們換個PWM輸出模式,保持其它條件不變,看看使用PWM2模式結果如何?

條件2:向上計數模式 + PWM2模式;RCR=2; 極性選擇高有效。

基于上面條件,當CCR大于計數器CNT時,OCx端輸出低電平,反之輸出高電平?【即跟PWM1模式時的輸出是相反的】。

RCR=2,同樣意味著計數器在發生第3次溢出時產生更新事件。

經驗證測試,基于上述條件輸出波形變成了下面的樣子。

【圖二、向上計數模式+ PWM2模式RCR=2;極性選擇高有效】

3個脈沖輸出倒是漂亮。細心的人是否還是發現了最后結尾那個地方有點不對勁呢?第三次發生溢出【CNT==ARR】產生更新事件后,計數器停止計數了,如果此時計數器的值等于ARR的值,根據剛才PWM2模式和極性選擇的條件,那輸出應該保持為高電平才合理怎么這又變成低了呢?

那問題出在哪里呢?似乎哪一副圖都存在著原理上說不過去的地方。結合前面的溢出與重裝的的介紹與分析,或許有人看出端倪了。

其實,這兩副圖中,最后發生溢出的時刻都是在CNT等于ARR的時候,溢出的同時觸發了更新事件。加上定時器工作在單脈沖PWM輸出模式,計數器被停止計數。但計數器停止計數,并不妨礙計數器溢出時自動重裝載器對其做初始值的重裝。那么這個重裝值是多少呢?結合這里的計數模式,這個重裝值正好是0,即計數器的值變為0了,并停在這個位置。既然溢出后計數器值變為0了,對于PWM1模式+高有效極性選擇的話,相應的比較輸出結果就是高電平;對于PWM2模式+高有效極性選擇的話,相應的比較輸出結果就是低電平。經這樣分析所得結論,正好跟我們的實測結果一致。

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

    關注

    31

    文章

    5363

    瀏覽量

    121157
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357555
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115368

原文標題:STM32定時器的溢出與重裝

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

收藏 人收藏

    評論

    相關推薦

    STM32定時器的分頻模塊、計數模塊、自動重裝載模塊?

    生溢出;向下計數時從多少開始往下計數。平常我們泛泛地說ARR寄存計數器提供計數邊界或重裝值,但它的具體含義及使用需要結合
    發表于 05-27 08:00

    STM32的通用定時器和高級定時器

    STM32的通用定時器和高級定時器除了支持單向的向上或向下計數模式外,還支持中心對齊
    發表于 08-11 08:51

    三種STM32定時器區別通用定時器功能特點描述

    三種STM32定時器區別通用定時器功能特點描述??1、STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定時器功能特
    發表于 08-13 08:47

    三種STM32定時器區別

    STM32F10x系列總共最多有8個定時器三種STM32定時器區別:通用定時器功能特點描述:①
    發表于 08-18 06:03

    STM32F10ZET6內部三種定時器區別

    STM32F10ZET6內部有三種定時器,分別是:高級定時器,通用定時器,基本定時器。他們的區別
    發表于 08-18 08:28

    STM32F1xx系列三種定時器的區別

    目錄三種定時器的區別通用定時器的特點描述計數器模式通用定時器工作
    發表于 08-18 07:09

    HT48 MCU定時器/計數器的應用

    HT48 MCU定時器/計數器的應用 本文以 HT48R10A-1 為例,分別介紹HT48RXA-1 系列中定時器/計數器的內部計時模式
    發表于 03-25 09:53 ?24次下載

    HT48 MCU 定時器/計數器的使用

    HT48 MCU 定時器/計數器的使用簡介:本文以 HT48R10A-1 為例,分別介紹HT48RXA-1 系列中定時器/計數器的內部計時模式
    發表于 03-26 08:36 ?18次下載

    STM32定時器基本計數原理解析

    STM32的TIM定時器分為類:基本定時器、通用定時器和高級定時器。從分類來看就知道
    發表于 12-27 16:20 ?1.8w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>基本<b class='flag-5'>計數</b>原理解析

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

    STM32的通用定時器和高級定時器除了支持單向的向上或向下計數模式外,還支持中心對齊
    發表于 12-08 20:51 ?31次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>三種</b>中心對齊<b class='flag-5'>計數模式</b>簡介

    STM32F103-定時器

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

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

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

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

    高精度定時器中single-shot計數模式不工作
    的頭像 發表于 10-25 18:08 ?618次閱讀
    高精度<b class='flag-5'>定時器</b>中single-shot<b class='flag-5'>計數模式</b>不工作

    簡述STM32定時器計數器模式

    STM32的向上計數模式是指定時器計數器從0開始計數,直到達到自動加載值(TIMx_ARR),然后重新從0開始
    的頭像 發表于 12-13 10:09 ?5328次閱讀

    STM32的向上計數模式如何產生計數器溢出事件?

    STM32的向上計數模式的自動加載值是指定時器計數器的最大計數值。當計數器達到這個值時,它會回滾
    的頭像 發表于 12-13 10:22 ?1532次閱讀
    百家乐玩法皇冠现金网| 百家乐官网下注法| 百家乐官网稳赚的方法| 大发888游戏代冲省钱技巧| 百家乐客户端软件| 百家乐官网真人游戏赌场娱乐网规则 | 百家乐官网电子游戏试| 怀化市| 大发888 dafa888| 申博百家乐公式软件| 太阳百家乐官网代理| 百家乐官网21点游戏| 邛崃市| 大发888娱乐场出纳| 百家乐小路是怎么画的| 伟易博百家乐官网的玩法技巧和规则 | 狮威百家乐官网娱乐场| 澳门百家乐官网博彩网| 海南博彩业| 百家乐咋样赢钱| 真人百家乐赌法| 风水学24山看水法| 尊龙百家乐官网娱乐场| 百家乐官网天天乐娱乐场| 中牟县| 凤凰娱乐开户| 大发888账号注册| 博彩百家乐五2013124预测| 百家乐博彩金| 百家乐庄闲的冷热| 2024地运朝向房子| 红树林百家乐官网的玩法技巧和规则 | 子洲县| 金都娱乐城| 瑞丰| 博彩老头排列三| 上游棋牌大厅| 德州扑克概率计算器| 大发888下载亚洲城| 南非太阳城皇宫酒店| 新全讯网3344555|